【发布时间】:2016-10-12 16:02:07
【问题描述】:
我已经在 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() 会出错。所以这也不起作用。
【问题讨论】:
-
你为什么不问一个问题来获得正确的方法来完成这项工作? This 是处理这种情况的正确方法。
-
您能否让您的问题更清楚(例如提供minimal reproducible example)。我无法发现您的代码不应该使用的内容。我什至无法得到它compile
-
@NathanOliver 这给了我错误
numeric_limits<streamsize>::max()max() 函数给我错误#define max(a,b) (((a) > (b))) ? (a) : (b))即使我在我的文件中定义了这个语句。 @πάνταῥεῖ 我会尝试上传一个我认为可能更清晰的视频。 -
您的代码中是否包含
#define max(a,b) (((a) > (b))) ? (a) : (b))或者您是否包含包含该内容的标头?
标签: c++ visual-studio visual-c++ buffer cin