[英]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.53
的2
部分讀入a
。 然后它再循環回來,嘗試用它做一些事情.
然后退出循環。
如果您還記錄了所讀取的內容,您可以看到這一點,即:
while (cin >> a)
{
cout << a << " " << ++count << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.