c++ - leer - buscando eof en una cadena:: getline
string input c++ (2)
¿Cómo verifico el fin del archivo usando la función std::getline
? Si uso eof()
no se señalizará eof
hasta que intente leer más allá del final del archivo.
El ciclo de lectura canónico en C ++ es:
while (getline(cin, str)) {
}
if (cin.bad()) {
// IO error
} else if (!cin.eof()) {
// format error (not possible with getline but possible with operator>>)
} else {
// format error (not possible with getline but possible with operator>>)
// or end of file (can''t make the difference)
}
Simplemente lea y luego verifique que la operación de lectura haya tenido éxito:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure/n";
}
Dado que la falla puede deberse a una serie de causas, puede usar la función eof
member para ver que lo que sucedió fue realmente EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF/n";
else
std::cout << "other failure/n";
}
getline
devuelve la secuencia para que pueda escribir de forma más compacta:
if(!std::getline(std::cin, str))