Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/03/2015, 15:50
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: El bucle while con ¡feof me duplica el último registro [C]

El error de tu programa consiste en los siguientes errores:
Imaginas que se han leído todas las estructuras y estas en la ultima aun por leer, fread lee esa ultima estructura(Todo correcto nada falla), printf la imprime. El amiguete feof() no ve ningún problema ya que la ultima lectura ha sido correcta, el bucle se repite una vez más(No debería, ya imprimimos la ultima estructura guardada.), entonces esta vez si que falla la lectura con fread ya que no hay nada mas que leer, no se guarda nada en la estructura( Eso porque fallo fread.), pero recuerde que la estructura aun conserva lo ultimo guardado anteriormente, feof() ahora si va hacer de chivato a causa de fread haber fallado pero no sin antes el printf haber imprimido una vez más.

Como vemos el programa hace lo que se pide, el problema es que feof solo va dar error después de que fread haya fallado, pero como imprimimos una vez más antes de salir sale malo ya que se imprime 2 veces lo ultimo.

Mejor usar los valores de retorno que te proporcionan las funciones que usas para leer desde los archivos para que eso no pase. Además de usar ferror y feof pero a modo de comprobación solamente.

Suerte