无效的int输入卡在无限循环中

时间:2013-10-20 22:44:01

标签: c++ infinite-loop

do
{
    cout << "Enter the numerator and denominator of the first fraction: ";
    cin >> a >> b;
    cout << endl;
    cout << "Enter the numerator and denominator of the second fraction: ";
    cin >> c >> d;
    cout << endl;
} while (!validNum(a, b, c, d));

...

bool validNum(int num1, int num2, int num3, int num4)
{
    if (cin.fail() || num2 == 0 || num4 == 0)
    {
        if (num2 == 0 || num4 == 0)
        {
            cout << "Invalid Denominator. Cannot divide by 0" << endl;
            cout << "try again: " << endl;
            return false;
        }
        else
        {
            cout << "Did not enter a proper number" << endl;
            cout << "try again: " << endl;
            return false;
        }
    }
    else
        return true;
}

我要做的是确保分母不为零并且他们只输入数字。除零代码工作正常,但是当你输入一个char值时,它进入一个无限循环,不知道为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

if (cin.fail() ... )

输入无效值(即char)后,流中的failbit将打开,validNum将始终返回false,从而导致无限循环。

您需要清除错误状态并在每次调用后忽略其余输入:

if (std::cin.fail())
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}