我已经在StackOverflow中找到了许多现有的答案,但我仍然卡住了。
代码:
int c;
cin >> c;
if(cin.fail()) {
cout << "Wrong Input";
cin.clear();
cin.ignore(INT_MAX, '\n');
}
else
{
cout << c*2;
}
如果我输入wring输入,例如s
而不是整数,则输出Wrong Input
。但是,如果我输入一个整数,然后输入一个字符串,它会忽略该字符串并继续输出前一个整数结果,因此它不会清除cin缓冲区,并且c
的旧值继续执行。
任何人都可以建议除cin.ignore()
以外的最佳方式,因为它似乎不起作用。
是的,cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
中的max()给出了错误。所以这也不起作用。
答案 0 :(得分:1)
需要在文件开头定义max()函数。 cin.ignore()
非常适合清除缓冲区,但是你需要数值限制函数max(),在我的情况下是错误的。
解决方案:
#ifdef max
#define max
#endif
在顶部添加这些行,并且诸如以下的函数将正常工作。
int id;
bool b;
do {
cout << "Enter id: ";
cin >> id;
b = cin.fail();
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} while ( b == true);
P.S:谢谢@Nathan