// Inserción en la tabla
void insert_into_table()
{
int menu2_on = 1;
struct persona avance;
FILE *save_file;
save_file = fopen ("archivo.dat", "rb+");
// Coloca el apuntador de posicion de archivo al final del archivo
// No necesitas leer todo el archivo para posicionarte al final
// tambien podrias abrir el archivo con "ab+" en lugar de "rb+"
// y te evitas el tener que usar fseek
fseek(save_file, 0, SEEK_END);
do {
struct persona data_save;
// Variable de tipo cadena para capturar la edad con fgets, ya que fgets
// solo funciona con cadenas.
char edad[3];
printf("Rut de la personan");
// Borra el buffer de entrada, para que no haya nada al leer los datos
// con fgets
while(getchar() != 'n');
// El tercer parametro es la longitud de tu cadena con el caracter de
// fin de cadena incuido. Si necesitas guardar 11 caracteres,
// debes reservar espacio para 12 (11+fin cadena). Si necesitas
// guardar 12, debes reservar espacio para 13, y asi, siempre
// debes reservar espacio para un caracter mas, que es el fin de cadena
fgets(data_save.rut, 12, stdin);
printf("Edad de la personan");
while(getchar() != 'n');
fgets(edad, 3, stdin);
// Conviertes la edad
data_save.edad = atoi(edad);
printf("Nombre de la personan");
while(getchar() != 'n');
fgets(data_save.nombre, 255, stdin);
fwrite (&data_save , 1 , sizeof(struct persona) , save_file);
printf("¿Desea agregar otra tupla? (1 Si, 0 No)n");
scanf("%d", &menu2_on);
} while (menu2_on == 1);
fclose(save_file);
struct persona junior;
FILE *test_file;
test_file = fopen ("archivo.dat", "rb");
if (test_file==NULL)
printf ("No se pudo abrir el archivon");
printf("Rut Edad Nombren");
printf("--------------------------------------------------------------------n");
while (!feof(test_file))
{
fread (&junior, sizeof(struct persona), 1, test_file);
// Necesitas volver a comprobar si despues de leer llegaste al final del archivo
if (!feof(test_file))
{
printf("%s %d %sn", junior.rut, junior.edad, junior.nombre);
}
}
// No olvides cerrar tus archivos
fclose(test_file);
}