Saltar al contenido

Cómo saber si el siguiente carácter es EOF en C++

La guía paso a paso o código que hallarás en este artículo es la solución más eficiente y válida que encontramos a tu duda o dilema.

Solución:

istream::peek() devuelve la constante EOF (cual es no garantizado que es igual a -1) cuando detecta fin de archivo o error. Para comprobar con firmeza el final del archivo, haga lo siguiente:

int c = file.peek();
if (c == EOF) 
  if (file.eof())
    // end of file
  else
    // error
 else 
  // do something with 'c'

Debe saber que la primitiva del sistema operativo subyacente, read(2)solo señala EOF cuando intenta leer pasado el final del archivo. Por lo tanto, file.eof() no será true cuando simplemente has leído hasta el último carácter del archivo. En otras palabras, file.eof() siendo false no significa que la próxima operación de lectura tendrá éxito.

Esto debería funcionar:

if (file.peek(), file.eof())

Pero, ¿por qué no comprobar si hay errores después de intentar leer datos útiles?

file.eof() devuelve un valor de bandera. Se establece en VERDADERO si ya no puede leer desde el archivo. EOF no es un personaje real, es un marcador para el sistema operativo. Así que cuando estés allí – file.eof() debiera ser true.

Entonces, en lugar de if (file.peek() == file.eof()) Deberías if (true == file.eof()) después de una lectura (o vistazo) para verificar si llegó al final del archivo (que es lo que está tratando de hacer, si lo entiendo correctamente).

Nos puedes añadir valor a nuestro contenido añadiendo tu experiencia en las referencias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *