我写了这个简短的代码来测试我对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语句。
为什么会这样?
答案 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