¿Cuáles son todas las razones por las que `fgetc()` podría devolver `EOF`?
Sin duda, fgetc()
devuelve EOF
cuando ocurre el fin del archivo o se produce un error de entrada. ¿Eso es todo y significa que no hay más datos disponibles?
FILE *inf = ...;
int ch;
while ((ch = fgetc(inf)) != EOF) {
;
}
if (feof(inf)) puts("Fin del archivo");
else if (ferror(inf)) puts("Error");
else puts("???");
¿Es suficiente probar con feof(), ferror()
?
Nota: EOF
aquí es una macro que se evalúa como algún int
negativo, a menudo -1
. No es sinónimo de fin del archivo.
He encontrado algunas preguntas y más que se acercan a este problema, pero ninguna que enumera todas las posibilidades.
davy.ai
No, el hecho de que
fgetc()
devuelvaEOF
no necesariamente significa que no haya más datos disponibles. Podría ser que ocurrió un error durante el flujo de entrada o que se alcanzó el marcador de fin de archivo.En el fragmento de código proporcionado, probar con
feof()
yferror()
es un buen enfoque para determinar la razón del valorEOF
. Sifeof()
devuelve verdadero, significa que se alcanzó el marcador de fin de archivo y no hay más datos disponibles. Siferror()
devuelve verdadero, significa que ocurrió un error durante el flujo de entrada y no hay más datos disponibles.Sin embargo, si ni
feof()
niferror()
devuelven verdadero, no está claro por qué se devolvióEOF
y puede ser necesario realizar una investigación adicional para determinar si hay más datos disponibles.