循环中的延迟流失效

时间:2019-05-22 15:20:56

标签: c++ stream

程序通过int读取cin个值并显示其计数。 cin用作while循环测试。

奇怪的是,即使使用非整数输入,循环也会增加计数,即,即使在退出流之前使流无效之后,循环也至少执行一次。

换句话说,输入

2.53

输出是

1

根据Lippman,Lajoie,Moo的 C ++ Primer,5e

  
    

当我们使用istream作为条件时,其作用是测试状态     流。如果流有效(即流未遇到错误),则     测试成功。当我们遇到文件结尾或遇到错误时,istream变得无效     无效的输入,例如读取不是整数的值。位于其中的istream     无效状态会导致条件产生错误。

  

由于在尝试读取double时流无效,为什么循环仍然执行,然后仅在下一次迭代中退出?

代码

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{

    int a;
    int count = 0;
    while (cin >> a)
        cout << ++count << endl;

    return 0;
}

初学者,因此将对您的帮助深表感谢。

1 个答案:

答案 0 :(得分:7)

这是因为它成功地将stdout = sys.stdout def filter_boring_stuff_out(line): if line.startswith('ignore'): return print(line, file=stdout) 的{​​{1}}部分读入2。然后,它再次循环回去,尝试对2.53进行操作,然后退出循环。

如果您还记录了所读内容,即可以看到它的作用:

a