如何在c ++中清除cin Buffer

时间:2016-10-12 16:02:08

标签: c++ visual-studio visual-c++ buffer cin

我已经在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()给出了错误。所以这也不起作用。

1 个答案:

答案 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