无效的int输入陷入无限循环 [英] invalid int input gets stuck in an infinite loop

查看:115
本文介绍了无效的int输入陷入无限循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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值,它进入一个无限循环,不知道为什么。任何想法?

What I am trying to do is make sure the denominator is not zero and that they only enter numbers. The dividing by zero code works fine but when you enter a char value it enters an infinite loop and do not know why. Any ideas?

推荐答案

if (cin.fail() ... )

一旦输入无效的值(例如 char ),流中的failbit将打开, validNum 将始终返回false,导致无限循环。

Once you enter an invalid value (i.e a char), the failbit in the stream will be on and validNum will invariably return false, causing an infinite loop.

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

You need to clear the error state and ignore the rest of the input after each call:

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

这篇关于无效的int输入陷入无限循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆