为什么Isdigit功能不能正常工作?

时间:2016-10-03 11:25:57

标签: c

我写了这个简短的代码来测试我对isdigit函数的理解:

int inChar;
printf("enter input:");
scanf(" %d", &inChar);

if (isdigit(inChar))
   printf("Your input was a number"); 
else
   printf("Your input was not a number.\n");

当我测试这个程序并输入一个数字时,C返回else语句(你的输入不是数字。)。因此无论我输入数字还是字母,程序都会返回else语句。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

isdigit()通过将char值转换为unsigned char来检查传递给它的单个字符。 因此,您无法直接传递任何int值并期望它能够正常工作。

isdigit()说:

   isdigit()
          checks for a digit (0 through 9).

要检查个位数,您可以修改:

char inChar;
printf("enter input:");
scanf(" %c", &inChar);

if (isdigit((unsigned char)inChar)) {
   printf("Your input was a number"); 
}
else {
printf("Your input was not a number.\n");
}

如果您有一个数组(包含数字的字符串),那么您可以使用循环。

答案 1 :(得分:2)

该函数的目的是对字符进行分类(如'3')。在使用%d读取的内容上运行它没有意义。

您应该使用char阅读一个%c。记得检查读数是否成功。

答案 2 :(得分:1)

C库函数void isdigit(int c)检查传递的字符是否为十进制数字字符。

如果您非常想用int尝试,可以这样启动

int inChar = '2';

以下代码给出了预期的结果。

int main()
{
    char inChar;
    printf("enter input:");
    scanf(" %c", &inChar);
    if (isdigit(inChar))
        printf("Your input was a number. \n");
    else
        printf("Your input was not a number.\n");
    return 0;   
}

输出:

vinay-1> ./a.out
enter input:1
Your input was a number