c++ - isdigit() 总是通过检查

标签 c++ eclipse pointers optimization

你好,我想检查我的程序,如果用户输入的不是数字,而不是输入数字。

所以我做了这个功能

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);

所以我的问题是,每次我给出一个数字时,它的行为就像我没有给出一样。它进入 if 并使变量等于零。我在这里缺少什么?

最佳答案

撇开您错误地使用 isdigit 这一事实不谈,检查 isdigit 已经太晚了,因为您正在读取 int .在这种情况下,查找数字的是流的 >>> 运算符,而不是您的代码。

如果要验证用户输入,将数据读入字符串,然后在其组件上使用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`

关于c++ - isdigit() 总是通过检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186137/

相关文章:

eclipse - 不允许 bitbucket git push

c++ - 在数据读入函数中将指针存储在 vector 中

arrays - 从程序集的角度看地址运算符和数组

C# 将方法作为参数传递

c++ - Qt GUI 如何将这些标签放入数组中

java - 我怎样才能让 Eclipse 以红色强调不存在的导入?

eclipse - PyDev - 关闭自动完成 + 完成建议的热键?

java - jni 回调中的黑色 Sprite

c++ - 有人可以为我澄清 C++ 中的运算符重载吗?

对 C 中的 "pass by reference"以及何时使用 & 或 * 感到困惑