我重载了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中的内容?
答案 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 强>