Пространства имён
Варианты
Действия

eof

Материал из cppreference.com
< cpp‎ | io

Синтаксис:

    bool istream::eof();

Функция eof() возвращает истину, если достигнут конец связанного файла ввода, в ином случае возвращается ложь.

Поток переходит в состояние EOF (конец файла) всякий раз, когда найден конец потока, т.е. прочитан символ, расположенный за концом файла. Так как оператор >> и getline обычно читают символы до последнего символа (до пробела, некорректного символа, символа конца строки или конца файла EOF), возможно, что потоковый флаг примет значение даже при кооректном считывании символа за концом файла. И наоборот, поток не переходит в состояние EOF, если после последнего символа стоит пробел, но чтение любого другого символа вызовет ошибку.

Поэтому флаг EOF **не может использоваться** как тест в цикле чтения всего содержимого потока до конца файла EOF.

Вместо этого нужно проверять состояние ошибки после попытки чтения. Это делается наиболее удобно с помощью проверки самого потока, как показано ниже:

   std::ifstream file("test.txt");
   std::string line;
   while (std::getline(file, line)) {
     // строка прочитана успешно, с ней можно работать
   }

Строка 7 примера, приведенного ниже, показывает главный способ использования проверки состояния EOF: после ошибки чтения. В такой ситуации можно так же определить, был ли сбой вызван окончанием потока или нет.

  std::ifstream file("test.txt");
  std::string word;
  double value;
  while (file >> word >> value) {
     строка word и значение double value прочитаны успешно
  }
  if (!file.eof()) throw std::runtime_error("Invalid data from file");

</syntaxhighlight>

Таблица ниже показывает список различных состояний, в которых может быть поток:

Test Description
if (s) Предыдущая операция успешна (аналог !s.fail() ).
if (s.fail()) Предыдущая операция не удалась.
if (s.eof()) Произведена попытка чтения за границей файла.
if (s.bad()) Состояние потока не определено. Поток не может быть больше использован.
if (s.good()) Нет ни одного из состояний bad/eof/fail.

Related Topics: bad, clear, exceptions, fail, good, rdstate