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);
}
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


0