循环中的延迟流无效

lin*_*age 2 c++ stream

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

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

换句话说,用于输入

2.53
Run Code Online (Sandbox Code Playgroud)

输出是

1
Run Code Online (Sandbox Code Playgroud)

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

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

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

2.53
Run Code Online (Sandbox Code Playgroud)

初学者,因此我们将不胜感激任何帮助。

Ste*_*eve 7

这是因为它成功地读取2了部分2.53a。然后,它再次循环回去,尝试对做某事,.然后退出循环。

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

while (cin >> a)
{
    cout << a << " " << ++count << endl;
}
Run Code Online (Sandbox Code Playgroud)