当cin
失败时,它永远失败。即,我以后什么都看不到,而且cin.fail()
总是返回真,无论我如何尝试清除它。
重新创建的最少代码:
#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>
我在这个问题下尝试了所有 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()
工作的顺序。这是什么原因?