Для того, чтобы входной поток вошел в состояние EOF, вы должны попытаться прочитать после конца потока . То есть этого недостаточно, чтобы достичь местоположения конца потока в потоке, необходимо фактически попытаться прочитать символ после конца. Эта попытка приведет к активации состояния EOF, что в свою очередь заставит cin.eof()
вернуть true.
Однако в вашем случае вы не только не делаете этого, вы (скорее всего) даже не достигаете конца потока. Если вы вводите 10
с клавиатуры, вы, вероятно, завершили ввод, нажав клавишу [Ввод]. Это привело к добавлению символа новой строки во входной поток. Таким образом, то, что вы на самом деле анализируете с помощью оператора >>
, в данном случае на самом деле представляет собой последовательность 10\n
. Поскольку вы запросили значение int
из потока, он читает только числовые символы из потока, то есть читает 1
и 0
, но останавливается на \n
. Это \n
остается в потоке. Вы никогда не читаете это. Таким образом, очевидно, что ваш код никогда не достигает позиции конца файла в потоке. В таком случае вы должны ожидать, что cin.eof()
станет true
.