以下代码在给定2个整数的情况下会按预期工作,但是,如果给出非数字值(如“ a”),则会跳过第二个cin。
int num1; // lesser integer value input by user
int num2; // greater integer value input by user
cout << "\n\nNumber 1: ";
cin >> num1;
cout << "Number 2: ";
cin >> num2;
if (!cin)
{
cout <<"\nError" <<endl;
return 0;
}
在为第一个提示输入数字时,程序会继续执行,但是,如果为第一个提示输入a
之类的内容,它将跳过第二个提示并出现错误情况
答案 0 :(得分:1)
当格式化的输入运算符>>
失败时(例如,当期望输入数字时,例如将a
作为输入),缓冲区中的输入不会被删除,下次您仍然会使用它想读取输入(它将尝试再次读取相同的a
)。
标记也不会自动清除。
您可以通过阅读输入内容来解决此问题:
if (!(std::cin >> num1))
{
// Failure of some kind
if (std::cin.eof())
{
// End of file, handle this any way you like or need
}
else
{
// Not end-of-file
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Skip bad input
std::cin.clear(); // Clear error flags
}
}
参考文献:
答案 1 :(得分:0)
这意味着您的输入验证失败。 检查用户输入是否符合程序预期的过程称为输入验证。 5是int而a是char。
char a;
cout << "\n\nYour Char ";
cin >> a;
会工作