如果为输入中的数字输入字符,程序将进入无限循环

时间:2013-02-11 07:34:48

标签: visual-c++

我似乎无法让错误检查适用于我的GetInput阶段。我试图让那个阶段重复,直到数字1 -5被放在那里而没有别的。谢谢!

void GetInput(void)
{
    cout << "Please enter a number between 1 and 5: \n";
    cin >> OnetoFive;
    if (isdigit(OnetoFive) && (OnetoFive <= 5) && (OnetoFive >= 1))
    {
        return;
    }

    else 
    {
        system("cls");
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
        cin >> OnetoFive;
    }
}

好吧,现在它适用于字母字符,但是如果我的值超过5,那么循环仍然无法工作......它可以工作一次,但第二次它只是运行....任何想法

3 个答案:

答案 0 :(得分:1)

首先,为什么要求输入两次?你的循环应该照顾它。

如果条件为

,则先改变你
   if (( isdigit(OnetoFive) && OnetoFive >= 1) && (OnetoFive <= 5))

你必须检查它是否是一个数字作为你的第一个条件。条件订单计数!

答案 1 :(得分:0)

你试过替换:

else 
{
    cin.clear();
    cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
    cin >> OnetoFive;
    if ((OnetoFive >= 1) && (OnetoFive <= 5) && isdigit(OnetoFive))
    {
        system("cls");
        return;
    }

}

else 
{
    GetInput();
}

答案 2 :(得分:0)

C ++不是我强有力的一面,但为了让您了解适合您需求的循环如何:

bool GetInput()
{
    cout << "Please enter a number between 1 and 5: \n";
    cin >> OnetoFive;

    if(isdigit(OnetoFive) && (OnetoFive <= 5) && (OnetoFive >= 1))
        {
            return true;
        }
    else 
        {
        system("cls");
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
        }   
    return false;
}

while(!GetInput())
{
    GetInput();
}

我的Android手机上写的代码所以无法保证它能够开箱即用,但它可以给你一个想法。