[ Foro de C ]
Tengo un problema con la parte de ficheros.
He comenzado hoy con esta parte. He hecho los primeros ejercicios pero en todos tengo el mismo problema.
No tengo problemas en escribir los ficheros pero cuando los leo y los imprimo en pantalla siempre me sale la última frase del fichero dos veces.
Por ejemplo os dejo el ejercicio 6.4.1 que dice
Crear un ?struct? que almacene los siguientes datos de una persona: nombre, edad,
ciudad de residencia. Pedir al usuario esos datos de una persona y guardarlos en un
fichero llamado ?gente.dat?. Cerrar el fichero, volverlo a abrir para lectura y mostrar los
datos que se habían guardado.
Mi código es:
#include<stdio.h>
#include<string.h>
main()
{
struct
{
char nombre[100];
int edad;
char residencia[150];
}persona;
char textoTemporal[100];
char linea[81];
FILE* fichero;
fichero = fopen("gente.dat","wt");
printf("Introduce el nombre de la persona:");
gets(persona.nombre);
fprintf(fichero,"Nombre: %s.\n", persona.nombre);
printf("Introduce la edad:");
gets(textoTemporal);
sscanf(textoTemporal, "%d" , &persona.edad);
fprintf(fichero,"Edad: %d.\n", persona.edad);
printf("Por último dinos la ciudad donde vive:");
gets(persona.residencia);
fprintf(fichero,"Vive en: %s.\n",persona.residencia);
fclose(fichero);
fichero=fopen("gente.dat","rt");
if(fichero == NULL)
printf("No existe el fichero o directorio.\n");
while(! feof(fichero)){
fgets(linea,80,fichero);
puts(linea);
}
fclose(fichero);
}
Todo va bien pero al imprimir lo escrito sale:
Nombre: Jose Manuel
Edad:25
Vive en: Sevilla
Vive en: Sevilla.
Alguien puede decirme porque ocurre esto?.
Me ha ocurrido ya en dos programas y no se porque.
Muchas gracias, saludos veraniegos.
El problema está en estas dos líneas seguidas:
fgets(linea,80,fichero);
puts(linea);
Porque no deberían estar seguidas: intentas leer, y luego escribes sin comprobar si realmente has podido leer. Antes del "puts" debería haber un "if (!feof(fichero) ) ..."
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)