c ++检查输入是否为数字

时间:2015-09-08 21:08:00

标签: c++

我正在使用netbean ide进行c ++学习 我想强制用户只选择1到3之间的数字

int displayMenu()
{
    while(true)
    {  
        cout<<"Please choose one of following options"<<endl;
        cout<<"1. deposit"<<endl;
        cout<<"2. withdraw"<<endl;
        cout<<"3. exit"<<endl;
        int input;
        cin >>input;

        if(input>=1 && input<=3 && cin)
        {
            return input;
            break;
        }
        else
        {
            cout<<"You have only 3 options. Please chooses 1,2 or 3"<<endl;
        }
    }
}

如果输入是int数,它可以正常工作 如果输入小于1或大于3,则此功能重新要求用户输入数字btw 1和3.

但是,如果输入是诸如&#39; f&#39;之类的字符,则它会执行无限循环。 这个功能知道&#39; f&#39;是错误的输入..

我在互联网上做了自己的研究。 !cin和cin.fail()不起作用。

你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

当您尝试读取整数但传递其他内容时,读取失败并且流变为无效。无论是什么导致错误仍留在流中。这会导致无限循环。

要解决此问题,请清除错误标志并忽略else子句中的其余部分:

    else
    {
        cout<<"You have only 3 options. Please chooses 1,2 or 3"<<endl;
        cin.clear(); // remove error flags
        // skip until the end of the line
        // #include <limits> for std::numeric_limits
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }

答案 1 :(得分:0)

您可以像这样修改它:

int displayMenu()
{
    while(true)
    {  
        cout<<"Please choose one of following options"<<endl;
        cout<<"1. deposit"<<endl;
        cout<<"2. withdraw"<<endl;
        cout<<"3. exit"<<endl;
        char input = cin.get();  //read a character

        cin.ignore(numeric_limits<streamsize>::max(), '\n');  //skip the rest of characters in cin buffer so that even if a user puts "123" only the first one is taken into account

        if(input>='1' && input<='3' && cin)  //check whether this is '1', '2' or '3'
        {
            return input;
            break;
        }
        else
        {
            cout<<"You have only 3 options. Please chooses 1,2 or 3"<<endl;
        }
    }
}