0

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()工作的顺序。这是什么原因?

4

0 回答 0