您好我想检查我的程序是否是用户而不是输入数字,如果他输入的数字不是数字。
所以我做了这个功能
void ValidationController::cinError(int *variable){
if(!isdigit(*variable)){
cin.clear();
cin.ignore(256, '\n');
cout <<*variable<<endl;
*variable=0;
cout <<*variable<<endl;
}
}
我这样称呼函数:
int more;
cin >>more;
cinError(&more);
所以我的问题是,每当我给出一个数字,它就像我没有。它进入内部,如果并使变量等于零。我在这里缺少什么?
答案 0 :(得分:8)
撇开您错误地使用isdigit
这一事实,无论如何都要检查isdigit
为时已晚,因为您正在阅读int
。在这种情况下,流的>>
运算符会查找数字,而不是代码。
如果要验证用户输入,请将数据读入string
,然后在其组件上使用isdigit
,如下所示:
string numString;
getline(cin, numString);
for (int i = 0 ; i != numString.length() ; i++) {
if (!isdigit((unsigned char)numString[i])) {
cerr << "You entered a non-digit in a number: " << numString[i] << endl;
}
}
// Convert your validated string to `int`
答案 1 :(得分:2)
检查您的isdigit
问题的评论
回到解决方案,异常处理怎么样? (我更喜欢dasblinkenlight的解决方案)
cin.exceptions(ios_base::failbit);
int more;
try
{
cin >> more;
if (!isspace(cin.get()))
/* non-numeric, non-whitespace character found
at end of input string */
cout << "Error" << endl;
else
cout << "Correct" << endl;
}
catch(ios_base::failure& e)
{
/* non-numeric or non-whitespace character found
at beginning */
cout << "Error" << endl;
}