Es muy importante saber cómo funciona cada función... te lo demuestro en dos minutos:
el flag EOF no se activa hasta que no se produce una lectura errónea. Lo que te está sucediendo es que, una vez has leído la última línea,
feof sigue devolviendo 1 porque, técnicamente, no has llegado al final del fichero. Después lanzas una nueva lectura... lectura que va a fallar y va a activar el flag EOF... pero no lo estás comprobando sino que te lanzas a invertir la línea... como la lectura ha fallado,
fgets no ha modificado el contenido de
texto, por lo que sigue almacenando la última línea de tu fichero.
¿Posibles soluciones? Puedes comprobar
feof después de lanzar la lectura:
Otra opción es comprobar el valor de retorno de
fgets. Si la lectura es correcta te devuelve la cadena leída y, si no, un puntero nulo:
Código C:
Ver original{
// equivalente a if( fgets(texto,MAX_BUFFER,f) != 0 )
if( fgets(texto
,MAX_BUFFER
,f
) ) {
// ...
}
}
En este caso comprobarías el flag EOF... como aun no has hecho una lectura incorrecta sigues dentro del bucle. A continuación lanzas una lectura que va a fallar... lo detectas y no haces absolutamente nada, dejas que el bucle intente repetirse... al volver a evaluarse EOF sales del bucle y evitas mostrar dos veces la última línea.
Un saludo