while leer dev c++ file-io getline

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))