仅当输入非数字值时,cin才跳过下一个cin

时间:2018-10-11 06:30:14

标签: 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 (!cin)
{
    cout <<"\nError" <<endl;
    return 0;
}

在为第一个提示输入数字时,程序会继续执行,但是,如果为第一个提示输入a之类的内容,它将跳过第二个提示并出现错误情况

2 个答案:

答案 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;

会工作