isdigit()总是通过检查

kyr*_*pav 4 c++ eclipse optimization pointers

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

所以我做了这个功能

void ValidationController::cinError(int *variable){

    if(!isdigit(*variable)){
        cin.clear();
        cin.ignore(256, '\n');
        cout <<*variable<<endl;
        *variable=0;
        cout <<*variable<<endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样称呼函数:

int more;
cin >>more;
cinError(&more);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是每次我给一个数字它就像我没有.它进入内部如果并使变量等于零.我在这里缺少什么?

das*_*ght 8

撇开你使用isdigit不当的事实,isdigit无论如何都要检查,因为你正在阅读int.在这种情况下,流的>>运算符会查找数字,而不是代码.

如果要验证用户输入,请将数据读入a 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`
Run Code Online (Sandbox Code Playgroud)