1
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 值时,它会进入无限循环并且不知道为什么。有任何想法吗?

4

1 回答 1

2
if (cin.fail() ... )

一旦您输入了一个无效值(即 a char),流中的故障位将打开并且validNum总是返回 false,从而导致无限循环。

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

if (std::cin.fail())
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
于 2013-10-20T22:59:01.803 回答