[ Foro de C ]

ficheros

08-Jul-2013 20:37
Jose Manuel Illanes Juan
1 Respuestas

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.


08-Jul-2013 23:49
Nacho Cabanes (+84)

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.)