Как проверить конец файла с помощью функции std::getline
? Если я использую eof()
, он не будет сигнализировать eof
, пока не попытаюсь прочитать за пределами конца файла.
Проверка для eof в строке:: getline
Ответ 1
Канонический цикл чтения в С++:
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)
}
Ответ 2
Просто прочитайте, а затем убедитесь, что операция чтения выполнена успешно:
std::getline(std::cin, str);
if(!std::cin)
{
std::cout << "failure\n";
}
Поскольку отказ может быть вызван рядом причин, вы можете использовать функцию члена eof
, чтобы увидеть, что произошло на самом деле EOF:
std::getline(std::cin, str);
if(!std::cin)
{
if(std::cin.eof())
std::cout << "EOF\n";
else
std::cout << "other failure\n";
}
getline
возвращает поток, поэтому вы можете записать более компактно:
if(!std::getline(std::cin, str))