在C 中清除CIN

Clear cin in C++

本文关键字:CIN 清除      更新时间:2023-10-16

可能的重复:
为什么这个唱片读书?

我超载了ISTream运算符(istream &operator>>...),并以某个格式计算:

(<x-coordinate>,<y-coordinate>)

我想测试多个(10)次,因此写了:

for (int i = 0; i < 10; i++)  {
    cin >> a;
    if (!cin.fail()) { cout << a << endl; }
    else { cout << "Invalid input!" << endl; cin.clear(); }
}

编辑:

我现在有以下代码:

for (int i = 0; i < 10; i++)  {
    cin >> a;
    if (!cin.fail()) { cout << a << endl; }
    else {
        cout << "Invalid input!" << endl; cin.clear();
        while (!cin.eof()) { cin.ignore(); } cin.ignore();
    }
}

Cthulhu提出了忽略。但是,问题是CIN仍然输出"无效的输入!"在遍历上面的代码之后:

(3,3) <-- input
(3,3) <-- output
Invalid output! <-- second output

有办法可以清除CIN中的内容?

cin.clear()不会空缓冲区,它在流上重置错误标志。然后您必须致电 cin.ignore

istream&  ignore ( streamsize n = 1, int delim = EOF );

从输入序列中提取字符并丢弃它们。

提取n个字符时,提取结束,并且 被丢弃或发现角色特征时,以先到者为准。 在后一种情况下,还提取了特定字符。


cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');

数字限制