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

invalid int input gets stuck in an infinite loop

本文关键字:无限循环 输入 int 无效      更新时间:2023-10-16
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 值时,它会进入无限循环并且不知道为什么。有什么想法吗?

if (cin.fail() ... )

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

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

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