当cin
失败时,它永远失败。即之后我无法阅读任何内容,cin.fail()
总是返回true,无论我如何尝试清除它。
要重新创建的最小代码:
#include <iostream>
using namespace std;
int main(){
int d;
while (!(cin >> d)) // Loop until I get a valid integer
{
cin.ignore(9999, '\n');
cin.clear();
}
cout << d << endl;
return 0;
}
输入最少:
a<Enter>
我在this question下尝试了所有C ++答案,但都没有奏效。奇怪的是,fflush(stdin)
做得很好。
我使用Dev-C ++作为我的IDE,并将其封装的GCC替换为SourceForge的MinGW GCC 6.3.0。编译
时,g++.exe
提供以下参数
-Wall -Wextra -std=c++14 -s -O3 -static-libgcc -static-libstdc++
在没有最后两个-static
参数的情况下,我的Ubuntu上的GCC 7.2.0也出现了同样的问题。
根据评论中的建议,交换cin.clear()
和cin.ignore()
的顺序有效。这是什么原因?