[英]std::cin resulting in infinite loop
為什么以下代碼在輸入字符或字符串時會導致無限循環? 我已經看到了有關此問題的信息,以及答案中提供的解決方案( 此處為示例),但它似乎根本沒有幫助。 該代碼實現了此處建議的解決方案,但仍會導致無限循環。
#include <iostream>
#include <bitset>
#include <limits>
using namespace std;
int main() {
int n;
while (!(cin >> n)) {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.clear();
cout << std::bitset<8>(cin.rdstate()) << endl;
cin >> n;
cout << std::bitset<8>(cin.rdstate()) << endl;
}
cout << n;
return 0;
}
g++ --version
產生以下效果: g++ (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
該程序的輸出如下:
00000000
00000100
00000000
00000100
... and so on
盡管已清除流並且忽略了所有輸入,但似乎重新輸入了該值。
您可以在clear
之前調用ignore
,但是只有在流沒有錯誤但流始終有錯誤的情況下, ignore
才有效。
當您同時切換兩個語句時,它可以正常工作:在一個或多個無效輸入之后,需要2個連續的有效輸入才能成功終止程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.