簡體   English   中英

循環中的延遲流失效

[英]Delayed stream invalidation in a loop

程序通過cin讀取int值並顯示其計數。 cin用作while循環測試。

奇怪的是,即使使用非整數輸入,循環也會增加計數,即循環在流出現無效之前至少執行一次,然后退出。

換句話說,輸入

2.53

輸出是

1

根據C ++ Primer,5e由Lippman,Lajoie,Moo

當我們使用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;
}

初學者,所以任何幫助都非常感謝。

這是因為它成功地將2.532部分讀入a 然后它再循環回來,嘗試用它做一些事情. 然后退出循環。

如果您還記錄了所讀取的內容,您可以看到這一點,即:

while (cin >> a)
{
    cout << a << " " << ++count << endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM