我希望用户输入密钥,我想检查密钥是否为数字,如果不是则抛出一条消息,如果是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;}
}
但是一旦我输入字母表,我的代码就进入了一个无限循环,我无法弄清楚原因。
任何帮助都会受到赞赏,或者如果有更好的替代方法,那么建议。
答案 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