Hola, tengo el siguiente programa que consiste en almacenar N registros en un fichero e ir a un registro concreto y mostrarlo en pantalla, pero no me funciona:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
/*Permite escribir nombres con espacio en blanco*/
#define LEE_CAD(c,n) { int i=0;\
c[i]=getchar();\
while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
while((c[i]!='\n') && (i < (n-1))){ \
i++;\
c[i]=getchar();}\
c[i]='\0';}
struct persona{
char nom[20];
char apellidos[100];
char edad[3];
};
int main(){
void alta_persona();
void mostrar_registro();
alta_persona();
mostrar_registro();
}
void alta_persona(){
FILE *pf;
char otro;
struct persona datos;
if((pf
=fopen("persona.dat", "wb"))==NULL
){ perror("Error al abrir el fichero datos_persona.\n"); }
do{
printf("Introduce el nombre: "); LEE_CAD(datos.nom,20);
printf("Introduce los apellidos: "); LEE_CAD(datos.apellidos,100);
printf("Introduce la edad: "); fwrite(&datos
, sizeof(datos
), 1, pf
); printf("¿Otra persona?(s/n) "); while((otro==' ')||(otro=='\n')||(otro=='\t'))
}while((otro=='s')||(otro=='S'));
printf("Error al cerrar el fichero\n"); }
}
void mostrar_registro(){
FILE *pf;
struct persona datos;
if((pf
=fopen("persona.dat", "rb"))==NULL
){ perror("Error al abrir el fichero datos_persona.\n"); }
fread(&datos
, sizeof(datos
), 1, pf
); printf("%s %s %s\n", datos.
nom, datos.
apellidos, datos.
edad); }
Cuando lo compilo en lugar de salirme por pantalla el registro 2 que es lo que pongo en la función fseek me sale esto: guel angel pez Perez. ¿Por qué no me sale el registro 2 qe es el yo pido?. Gracias.