Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anaceci21 en 28 Mayo 2013, 23:08 pm



Título: Ayuda con programa en C (archivo binario)
Publicado por: anaceci21 en 28 Mayo 2013, 23:08 pm
Tengo el siguiente problema... este es mi código para ingresar unas calificaciones y que te muestre el promedio, cuando lo ingreso si lo guarda en el archivo y hasta puedo ver lo que contiene eligiendo la segunda opción del menú. El problema es cuando cierro el ejecutable y vuelvo a ejecutarlo y le doy leer, se traba. ¡Ayuda!




#include <stdio.h>

struct calificaciones
{
int calificaciones[13];
float promedio;
};


typedef struct calificaciones *ap_calificaciones;



void escribir_registro(FILE *arch, ap_calificaciones p, ap_calificaciones inicio)
{
int calif,i,k;
float promedio=0;

p=(ap_calificaciones) malloc (sizeof(struct calificaciones)*31);

for (i=22,inicio=p;i<25;i++,p++)
{
printf("\n PROGRAMA #%d",i+1);

for(k=0;k<13;k++)
{
printf("\n Criterio #%d",k+1);
printf("\n Calificacion: ");
scanf("%d",&calif);

//validacion
if(calif<-1 || calif>5)
{
do
{
printf("ERROR: calificacion invalida, vuelva a ingresar la calificacion: ");
scanf("%d",&calif);
}while(calif<-1 || calif>5);
}

p->calificaciones[k]=calif;
if(p->calificaciones[k]!=-1)
promedio=promedio+p->calificaciones[k];
}
p->promedio=promedio*100/65;
promedio=0;
printf("\n\n\n PROMEDIO PROGRAMA #%d: %.2f \n\n\n",i+1,p->promedio);

fwrite(&p,sizeof(p),1,arch);
}
system("pause");
system("cls");
}



void leer_registro(FILE *arch, ap_calificaciones p, ap_calificaciones inicio )
{
int i=1;
float promedio_general=0, promedio_final;
int tamanio=sizeof(p);
rewind(arch);

while (fread (&p, tamanio, 1, arch)!= 0 )
{
promedio_general=promedio_general+p->pro…
printf("\n\n\n\n PROGRAMA #%d\n Promedio: %.2f",i+22,p->promedio);
i=i+1;
}

promedio_final=promedio_general/3;
printf("\n\n\n\n\n\n PROMEDIO GENERAL: %.2f\n\n\n ",promedio_final);

system("pause");
system("cls");
}