C/Visual C - ayuda con error!

   
Vista:

ayuda con error!

Publicado por nico (1 intervención) el 20/11/2011 01:18:55
hola, no puedo encontrar el error en el siguiente codigo. Cuando creo el archivo binario y lo leo en la misma ejecucion del programa no hay ningun problema, pero cuando el archivo ya esta creado e intento leerlo se produce un error en la lectura de nom y ape del paciente. Si alguien puede ayudarme a encontrar el error se lo agradeceria.


void main ()
{
char resp='s';

printf("desea crear el archivo?\n");
resp=getchar();
fflush(stdin);
if(resp=='s'){
printf("aca crea el archivo:\n");
crear_paciente();
}

printf("aca lee el archivo\n");
leer_paciente();
}

void crear_paciente()
{
FILE *pFile;
pFile=fopen("pacientes.dat","wb");
Tpaciente *vectorp;
char resp='s';
char nombre[50];
char apellido[50];

vectorp=(Tpaciente*)malloc(sizeof(Tpaciente)*100);
int i=0;
printf("desea crear el archivo?(s o n)");
scanf("%c",&resp);
fflush(stdin);

while(resp=='s')
{

vectorp[i].nom=(char*)malloc(sizeof(char)*50);
vectorp[i].ape=(char*)malloc(sizeof(char)*50);

printf("ingrese el nombre: ");
scanf("%s",vectorp[i].nom);

printf("ingrese el apellido: ");
scanf("%s",vectorp[i].ape);

printf("ingrese el numero de dni: ");
scanf("%d",&vectorp[i].dni);

printf("ingrese fecha de nac.: ");
scanf("%d %d %d",&vectorp[i].f_nac.dd,&vectorp[i].f_nac.mm,&vectorp[i].f_nac.aa);

fwrite(&vectorp[i].nom,sizeof(char),50,pFile);
fwrite(&vectorp[i].ape,sizeof(char),50,pFile);
fwrite(&vectorp[i].dni,sizeof(long),1,pFile);
fwrite(&vectorp[i].f_nac.dd,sizeof(int),1,pFile);
fwrite(&vectorp[i].f_nac.dd,sizeof(int),1,pFile);
fwrite(&vectorp[i].f_nac.dd,sizeof(int),1,pFile);

i++;
printf("desea continuar creando datos? (s o n)");
fflush(stdin);
resp=getchar();
}
fwrite(&i,sizeof(int),1,pFile);

fclose(pFile);
}

void leer_paciente()
{
FILE *pFile;
pFile=fopen("pacientes.dat","rb");
Tpaciente *leerp;

int i=0,n,nBytes;

fseek(pFile,0,SEEK_END);
nBytes=ftell(pFile);
fseek(pFile,nBytes-(sizeof(int)),SEEK_SET);
fread(&n,sizeof(int),1,pFile);
printf("cantidad de pacientes: %d\n",n);
rewind(pFile);

leerp=(Tpaciente*)malloc(sizeof(Tpaciente)*100);

while(i<n)
{

leerp[i].nom=(char*)malloc(sizeof(char)*50);
leerp[i].ape=(char*)malloc(sizeof(char)*50);

fread(&leerp[i].nom,sizeof(char),50,pFile);
fread(&leerp[i].ape,sizeof(char),50,pFile);
fread(&leerp[i].dni,sizeof(long),1,pFile);
fread(&leerp[i].f_nac.dd,sizeof(int),1,pFile);
fread(&leerp[i].f_nac.dd,sizeof(int),1,pFile);
fread(&leerp[i].f_nac.dd,sizeof(int),1,pFile);

printf("%s ",leerp[i].nom);
printf("%s ",leerp[i].ape);

printf("%d ",leerp[i].dni);
printf("%d %d %d ",leerp[i].f_nac.dd,leerp[i].f_nac.mm,leerp[i].f_nac.aa);




free(&leerp[i].nom);
free(&leerp[i].ape);
i++;

}

free(leerp);
fclose(pFile);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con error!

Publicado por Tom (481 intervenciones) el 22/11/2011 12:20:22
En principio, y sin probar, estás liando un pelín la cosa con los punteros ...

Los malloc han de ser:

1
(Tpaciente*)malloc(sizeof(Tpaciente*) * 100);


las escrituras:

1
fwrite(vectorp[i].nom, sizeof(char), 50, pFile);


y las lecturas:

1
fread(leerp[i].nom, sizeof(char), 50, pFile);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar