C++ cin仅在输入非数值时跳过下一个cin
以下代码在给定2个整数时按预期工作,但是如果给定非数值(如“a”),则跳过第二个cinC++ cin仅在输入非数值时跳过下一个cin,c++,C++,以下代码在给定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 (
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;
}
int num1;//用户输入的较小整数值
int num2;//用户输入的更大整数值
cout>num1;
cout>num2;
如果(!cin)
{
cout当格式化输入运算符>
失败时(例如,当需要一个数字时,您将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
}
}
if(!(标准::cin>>num1))
{
//某种失败
if(std::cin.eof())
{
//文件末尾,按您喜欢或需要的方式处理此问题
}
其他的
{
//不是文件的结尾
std::cin.ignore(std::numeric_limits::max(),'\n');//跳过错误输入
std::cin.clear();//清除错误标志
}
}
参考资料:
这意味着您的输入验证失败。
检查用户输入是否符合程序预期的过程称为输入验证。
5是int,a是char
char a;
cout << "\n\nYour Char ";
cin >> a;
chara;
cout>a;
Will work您期望什么?出现了一个错误,您得到了错误条件。此外,输入的开头仍然有“a”。不太了解cin的错误情况。当前的顶部答案帮助您澄清了这一点。感谢您的帮助