Подтвердить что ты не робот

Проверка для eof в строке:: getline

Как проверить конец файла с помощью функции std::getline? Если я использую eof(), он не будет сигнализировать eof, пока не попытаюсь прочитать за пределами конца файла.

4b9b3361

Ответ 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))