C ++:检查输入是否为数字

时间:2016-08-29 16:25:11

标签: c++

我希望用户输入密钥,我想检查密钥是否为数字,如果不是则抛出一条消息,如果是0则抛出。

我在这里阅读了一个答案,提出了以下方法:isdigit() c++, probably simple question, but stuck

int key;

while (true){

    cout << "Enter Key (Press 0 to Exit) : ";

    if (cin>>key){

        if (key == 0){ break; }

        //Code goes here
    }

    else{cout<<"Key should be a digit "<<endl;}
}

但是一旦我输入字母表,我的代码就进入了一个无限循环,我无法弄清楚原因。

任何帮助都会受到赞赏,或者如果有更好的替代方法,那么建议。

2 个答案:

答案 0 :(得分:0)

cin>>key

尝试从控制台读取int

如果你输入一个非数字字符,下一次从cin读取将把cin流设置为错误状态,并且在你清除流的错误标志之前,不能再从cin中读取任何内容。

cin.clear();

重置错误状态。

您还必须忽略输入的字符,这会导致

失败模式
cin.ignore();

示例:

int main()
{   
    int i;

    while (1) 
    {   
        std::cin >> i;

        if ( std::cin.fail())
        {   
            std::cout << "Something went wrong with cin" << std::endl;
            std::cin.clear();
            std::cin.ignore();
        }
        else
        {   
            std::cout << "input works, read: " << i << std::endl;
        }
    }
}

如果您尝试阅读单个数字表单控制台,请在此处查看:

Capture characters from standard input without waiting for enter to be pressed

答案 1 :(得分:0)

  

我输入字母表后,我的代码会进入无限循环

那是因为您将key声明为int,因此当std::cin无法读取整数时,流将设置为错误状态并且{{1 <{1}}内的语句不再可以访问。

一种可能的替代方法是从输入流中读取一行作为字符串,然后尝试将其转换为数字。

现在,鉴于OP的问题:

  

我希望用户输入密钥,我想检查密钥是否是   一个或多个,......

如果 key 必须被视为单个或多个数字,我不清楚(可能是我的错)。在下面的代码片段中,我将展示后一种情况。请注意,它也可能包括前者。

break