为什么以下代码在输入字符或字符串时会导致无限循环?我已经看到了有关它的问题,以及答案中提供的解决方案(此处的示例),但它似乎根本没有帮助。该代码实现了那里建议的解决方案,但仍会导致无限循环。
#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
尽管流已被清除并且所有输入已被忽略,但似乎正在重新输入该值。
您调用ignore
before clear
,但ignore
只有在流没有错误时才有效,但在那个时候它总是有。
当您切换两个语句时,它工作正常:在一个或多个无效输入之后,您需要 2 个连续的有效输入才能成功终止程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句