Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么isdigit()在C中不能正常工作_C - Fatal编程技术网

为什么isdigit()在C中不能正常工作

为什么isdigit()在C中不能正常工作,c,C,为什么整数和字符都是isdigit()打印0(false) 代码如下: #include <stdio.h> #include <ctype.h> int main( void ) { printf( "with input of integer, output is %d\n", isdigit(1) ); printf( "with input of char, output is %d\n", isdigit

为什么整数和字符都是
isdigit()
打印
0
(false)

代码如下:

#include <stdio.h>
#include <ctype.h>

int main( void )
{
    printf( "with input of integer, output is %d\n", isdigit(1) );
    printf( "with input of char, output is %d\n", isdigit('k') );
}

您没有将1作为角色

尝试将1作为“1”给出

isdigit('1')

因为数字1通常对应于ASCII表中的第二个字符(0之后),而字符“1”具有序号49。因此,您需要的是
isdigit('1')


C不会自动在数字类型和字符类型之间转换。如果你给它一个数字,其中一个字符是预期的,它将采取的数字的一部分-我打赌这是低阶字节-并传递给函数。但是0x01与“1”不同,因此
isdigit
正确地返回0

正如其他人所指出的,如果使用正确的字符参数调用
isdigit
,它将返回预期的(非零)值

考虑以下代码:

#include <stdio.h>
#include <ctype.h>

int main()
  {
  printf("isdigit(1) = %d\n", isdigit(1));
  printf("isdigit('1') = %d\n", isdigit('1'));
  printf("isdigit('k') = %d\n", isdigit('k'));

  return 0;
  }

这些是导致isdigit()返回int 1的输入:

0-9的ASCII码:47、48、49、50、51、52、53、54、55、56、57

或者作为一个字符:“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”


对于其他所有内容,isdigit()将返回int 0。

函数
isdigit
将字符代码作为参数

如果您使用的是(很可能是),则数字
0
9
的字符代码为
48
57
。数字
0
的字符代码为
48
,数字
9
的字符代码为
57

因此,如果要将数字
1
传递给函数
isdigit
,则必须传递相应的字符代码
49
,如下所示:

isdigit(49)

然而,大多数程序员只是简单地编写代码

isdigit('1')


相反。在这种情况下,字符文本
'1'
将计算为相应的字符代码
49
,因此这两个表达式是等效的。

代码应该直接作为文本发布在您的问题中。请尝试使用表示数字的字符:
isdigit('1')
。我投票重新讨论这个问题,正如我现在编辑的问题,用实际文本替换图像。指定的关闭原因问题似乎不适用,因为问题不是由打字错误引起的,而且问题是可复制的。这个问题是由于OP不了解整数和数字字符代码之间的差异而引起的。令人恼火的是,在7.4字符处理中引用了C标准
:“标题
声明了几个对字符分类和映射有用的函数。在所有情况下,参数均为
int
,其值应表示为
无符号字符
,或应等于宏
EOF
的值。如果参数有任何其他值,则行为是未定义的。”@Bob_uuuu当然,我忘记了这个事实,谢谢!我现在更新了回复。这一个非常简洁,解释得很好。+1
#include <stdio.h>
#include <ctype.h>

int main()
  {
  printf("isdigit(1) = %d\n", isdigit(1));
  printf("isdigit('1') = %d\n", isdigit('1'));
  printf("isdigit('k') = %d\n", isdigit('k'));

  return 0;
  }
isdigit(1) = 0
isdigit('1') = 2048
isdigit('k') = 0