无法清除cin。坚持输入

时间:2017-10-27 15:23:49

标签: c++ cin input-buffer

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

0 个答案:

没有答案