es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    No, el hecho de que fgetc() devuelva EOF 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() y ferror() es un buen enfoque para determinar la razón del valor EOF. Si feof() devuelve verdadero, significa que se alcanzó el marcador de fin de archivo y no hay más datos disponibles. Si ferror() devuelve verdadero, significa que ocurrió un error durante el flujo de entrada y no hay más datos disponibles.

    Sin embargo, si ni feof() ni ferror() 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.

Comments are closed.