gpt4 book ai didi

c++ - 如何在 C++ 中清除 cin 缓冲区

转载 作者:行者123 更新时间:2023-11-28 05:28:45 30 4
gpt4 key购买 nike

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

最佳答案

需要在文件开头定义 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);

附:谢谢@Nathan

关于c++ - 如何在 C++ 中清除 cin 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003190/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com