【发布时间】:2015-09-01 17:42:15
【问题描述】:
char str[20];
printf("Enter anything\n");
scanf("%s",str);
for(int i = 0 ; i<strlen(str) ; i++)
{
if( isdigit(str[i]))
printf("%d",(int)str[i]);
}
我尝试使用上面的代码,但输出是数字的 ASCII 值而不是实际数字。 比如,输入:“0” 输出:“48”。
当我尝试 (int)(str[i]-'0'); 而不是 (int)str[i]); 时,我得到了正确的答案,但我不明白为什么它是正确的。
【问题讨论】:
-
写
scanf("%19s",str);会更安全 -
今天有趣的事实,'0' == 48 == 0x30
-
@KevinDTimm:仅限 ASCII。这个问题的有趣之处在于,C 要求
'n' - '0' == n用于0..9中的所有数字n。
标签: c char printf decimal ascii