Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Archivo binario no abre cuando se vuelve a ejecutar el programa

Estas en el tema de Archivo binario no abre cuando se vuelve a ejecutar el programa en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/05/2013, 15:10
 
Fecha de Ingreso: mayo-2013
Mensajes: 1
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Archivo binario no abre cuando se vuelve a ejecutar el programa

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");
}
  #2 (permalink)  
Antiguo 30/05/2013, 18:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Archivo binario no abre cuando se vuelve a ejecutar el programa

hola! creo el error esta en:
Código C:
Ver original
  1. (fread (&p, tamanio, 1, arch)!= 0 )
"p" ya es un puntero, por lo tanto si vos pones "&p" les estarias pasando la direccion de "p"(puntero a puntero) a la funcion fread, lo cual esta mal

Otra cosa, antes de entrar a la funcion leer_registro, "p" tambien esta creado como:
Código C:
Ver original
  1. p=(ap_calificaciones) malloc (sizeof(struct calificaciones)*31);


Saludos

Etiquetas: binario, int, programa, struct, vuelve
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:44.