我的代码无法验证输入为整数

时间:2019-02-13 20:01:56

标签: c++ validation input integer

我想从用户那里获得输入并将其验证为整数,但是当程序中的字母或单词结束时,我的方法似乎失败了。任何人都可以快速轻松地解决此问题吗?

int getUserInput(){

    int maxNumber;

    // the user input a valid integer, process it

    if (cin >> maxNumber)
    {
        if (maxNumber>1 || maxNumber<=100) {
            return maxNumber;
        }
    } else{
        getUserInput();
    }

}

2 个答案:

答案 0 :(得分:1)

如果用户未键入整数,则您的代码将进入一个无限递归循环,该循环无法从中恢复,最终导致调用堆栈溢出。

请尝试以下类似操作:

int getUserInput()
{    
    int number;

    cout << "Enter a number between 1 - 100: ";

    do
    {
        // if the user input a valid integer, process it

        if (cin >> number)
        {
            if (number >= 1 && number <= 100)
                break;

            cout << "Number out of range, try again: ";
        }
        else
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');

            cout << "Invalid input, try again: ";
        }
    }
    while (true);

    return number;
}

答案 1 :(得分:1)

您没有说明您希望输入在什么范围内,因此请进行相应调整。

int getUserInput() {

    int maxNumber;

    while (!(cin >> maxNumber) || maxNumber <= 1 || 100 < maxNumber) {
        if (cin)
            cout << "number out of range, try again: ";
        else {
            cin.clear();
            cin.ignore(numeric_limits<int>::max(), '\n');
            cout << "Not a number, please try again : ";
        }
    }

    return maxNumber;
}