C++ cin仅在输入非数值时跳过下一个cin

C++ 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 (

以下代码在给定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;
}
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的错误情况。当前的顶部答案帮助您澄清了这一点。感谢您的帮助