[ Foro de C ]
Hola; cuando intento leer los caracteres de un fichero mediante un bucle while (con la condicion de salida que sea distinto de final de fichero) y le pido que los visualice, me saca un caracter "raro" donde deberia estar el final del fichero. ¿Alguien sabrÃa decirme porqué? o en su defecto, ¿cómo hay que hacer, para conseguir lo que quiero? Gracias. Un saludo.
Pon el código fuente para que veamos exactamente qué ocurre. En principio, parece que intentas leer más allá del final del fichero, porque tomes el dato y lo manipules antes de comprobar si realmente se ha alcanzado el "feof".
Pero insisto: sin ver el código fuente, todo son suposiciones...
Es el problema que me temÃa:
while (!feof(f))
= repite mientras no se haya acabado aún
car=fgetc(f)
= intenta leer una letra...
(pero no compruebas si esa letra se ha podido leer o si es en este momento cuando se ha acabado el fichero
printf ("%c\n", car);
= escribe esa letra... que quizá no hayas podido leer.
La idea importante es que "feof" se actualiza cuando intentas leer y ya no hay datos, no cuando lees el último dato. Por eso, el "printf" y el contador deberÃan estar dentro de una comprobación:
if (!feof(f)) {
...
Me temo que no es asÃ: no sólo influye si el bucle es un while o un do..while. Es serÃa importante si leyera el dato en la orden "while" o inmediatamente antes de ella, sin llegar a utilizar el dato.
Mientras dentro del bucle lea un dato y luego intente usarlo sin comprobar si realmente se ha podido leer, tendrá problemas.
(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.)