4

可能重复:
为什么这个 cin 读数卡住了?

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

克苏鲁建议忽略。但是,问题是 cin 仍然输出“无效输入!” 运行完上面的代码后:

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

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

4

1 回答 1

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');

数值限制

于 2012-10-28T00:54:14.067 回答