Проблема заключается в том, что вы злоупотребляете eof()
: единственное использование этого флага - определить, не было ли последнее чтение неуспешным, потому что вы достигли конца файла (ну, это даже не делает, чтобы быть справедливым:даже если установлено eof()
, это может не быть реальной причиной, хотя, вероятно, так и было).Чтобы определить состояние потока, используйте преобразование в bool
:
while (in) ...
Обратите внимание, что вам все равно нужно проверить после чтения, было ли чтение успешным.
N3168 документ, обсуждаемый комитетом по стандартизацииЯ не знаю, какую конкретно тему он обсуждает, кроме того, что это было в ответ на сообщение о дефекте национального органа.