¿Cómo se detecta EOF depende de lo que estés utilizando para leer la corriente:
function result on EOF or error
-------- ----------------------
fgets() NULL
fscanf() number of succesful conversions
less than expected
fgetc() EOF
fread() number of elements read
less than expected
comprobar el resultado de la llamada de entrada para la condición apropiada anteriores, llame a feof()
para determinar si el resultado se debió para golpear EOF o algún otro error.
Usando fgets()
:
char buffer[BUFFER_SIZE];
while (fgets(buffer, sizeof buffer, stream) != NULL)
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
Usando fscanf()
:
char buffer[BUFFER_SIZE];
while (fscanf(stream, "%s", buffer) == 1) // expect 1 successful conversion
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
Usando fgetc()
:
int c;
while ((c = fgetc(stream)) != EOF)
{
// process c
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted the read
}
Usando fread()
:
char buffer[BUFFER_SIZE];
while (fread(buffer, sizeof buffer, 1, stream) == 1) // expecting 1
// element of size
// BUFFER_SIZE
{
// process buffer
}
if (feof(stream))
{
// hit end of file
}
else
{
// some other error interrupted read
}
Tenga en cuenta que el formulario es el mismo para todos ellos: compruebe el resultado de la operación de lectura; si falló, luego compruebe si hay EOF. Usted verá un montón de ejemplos como:
while(!feof(stream))
{
fscanf(stream, "%s", buffer);
...
}
Esta forma no funciona de la forma en que la gente piensa que lo hace, porque feof()
no volverá hasta cierto después de haber intentado leer más allá del final del archivo. Como resultado, el ciclo se ejecuta una vez más, lo que puede o no causarle un poco de dolor.
Bueno, pero algunas sugerencias de esta respuesta popular: 1) "Función:' fscanf() 'resultado en EOF o error: número de conversiones exitosas menos de lo esperado" equivale a un error de entrada "con fallas en la conversión de formato. OMI. Sugerir otra columna OTOH es una función complicada 2) revisión ortográfica 3) Sugerir un comentario "Código incorrecto" en el ejemplo 'while (! Feof (stream))'. – chux