用C ++清除cin

时间:2012-10-28 00:52:44

标签: c++ cin

  

可能重复:
  Why is this cin reading jammed?

我重载了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();
    }
}

克苏鲁建议忽视这一点。但是,问题仍然是输出&#34;输入无效!&#34;在完成上面的代码之后:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

从输入序列中提取字符并将其丢弃。

     

提取n个字符后,提取结束   丢弃或找到字符分隔时,以先到者为准。   在后一种情况下,也会提取delim字符本身。


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

<强> Numeric Limits