C ++: интерпретация конца файла при использовании std :: cin в качестве условия - PullRequest
0 голосов
/ 01 апреля 2020

Я знаю, что мы можем использовать std :: cin в качестве условия, например, в

while (std::cin >> value)

, используя std :: cin в качестве условия, вызовем функцию-член std :: ios :: оператор bool . Он говорит, что он «возвращает, установлен ли флаг ошибки (сбойный или плохой»), который не включает eofbit. Несмотря на это, передача конца файла (по Ctrl + d) завершает l oop. Почему? Может ли failbit или badbit также установить eofbit?

Я также нашел это объяснение, но в C ++ Reference конкретно сказано, что "эта функция не возвращает то же самое, что и член good"

1 Ответ

1 голос
/ 01 апреля 2020

Приведенное выше значение l oop не проверяет конец файла. Он проверяет неспособность прочитать значение , конец файла - только одна из возможных причин этого. Даже конец файла не обязательно вызывает сбой при чтении значения, представьте себе, что вы читаете целое число, где цифры заканчиваются в конце файла, вы все равно читаете целое число, даже если достигли конца файла.

Суть в том, что сбой чтения значения по любой причине устанавливает бит сбоя, и это l oop проверяет это.

...