﻿# V663\. Infinite loop is possible\. The 'cin\.eof\(\)' condition is insufficient to break from the loop\. Consider adding the 'cin\.fail\(\)' function call to the conditional expression\.

Анализатор обнаружил потенциальную ошибку, из\-за которой может возникнуть бесконечный цикл\. При работе с классом 'std::istream' недостаточно вызова функции 'eof\(\)' для завершения цикла\. В случае возникновения сбоя при чтении данных, вызов функции 'eof\(\)' будет всегда возвращать значение 'false'\. Для завершения цикла в этом случае необходима дополнительная проверка значения, возвращаемого функцией 'fail\(\)'\.

Рассмотрим пример некорректного кода:

```cpp
while (!cin.eof())
{
  int x;
  cin >> x;
}
```

Исправить ошибку можно усложнив условие\. Корректный вариант кода:

```cpp
while (!cin.eof() && !cin.fail())
{ 
  int x;
  cin >> x;
}
```

Впрочем, у этого варианта тоже есть недостатки\. Наиболее простой и правильный вариант кода выглядит так:

```cpp
int x;
while(cin >> x) {
  ....;
}
```

Подробно вопрос чтения из потока разбирается здесь: [Why is iostream::eof inside a loop condition \(i\.e\. 'while \(\!stream\.eof\(\)\)'\) considered wrong?](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-i-e-while-stream-eof-cons)