将字符数据类型打印为整数数据类型 #包括 main() { chara[12]; scanf(“%s”,a); int s=0; s=s+a[1]; printf(“%d”,s); } 例子: a=1234 产量:50

将字符数据类型打印为整数数据类型 #包括 main() { chara[12]; scanf(“%s”,a); int s=0; s=s+a[1]; printf(“%d”,s); } 例子: a=1234 产量:50,c,C,这是一个基本的c程序。当我试图打印s的值时,它显示50 但是当我用a[1]-“0”替换a[1]时,它会显示索引(输出:2)中存在的字符的确切值。发生这种情况的原因是什么?ASCII表中的字符常量'2'有代码50。因此,使用格式说明符%d将字符显示为整数,即显示其值50 至于这个表达 #include<stdio.h> main() { char a[12]; scanf("%s",a); int s=0; s=s+a[1]; printf("%

这是一个基本的c程序。当我试图打印s的值时,它显示50
但是当我用
a[1]-“0”
替换
a[1]
时,它会显示索引
(输出:2)
中存在的字符的确切值。发生这种情况的原因是什么?

ASCII表中的字符常量
'2'
有代码50。因此,使用格式说明符
%d
将字符显示为整数,即显示其值50

至于这个表达

#include<stdio.h>
main()
{
    char a[12];
    scanf("%s",a);
    int s=0;
    s=s+a[1];
    printf("%d",s);
}
example:
a=1234
output:50

如前所述,表示字符
'2'
的[1]存储ASCII值
50
。字符
'0'
具有ASCII码
48
。因此,区别在于
2

让我们看看在运行时发生了什么

a[1] - '0'
那是

s is initialized to 0

and a[] is scanned with "1234"; 
第一例

a[0] = '1';
a[1] = '2';
a[2] = '3';
a[3] = '4';
第二种情况

s=s+a[1]; // 0 + asci value of 2 which evaluates to 50

C指定字符的代码
'0'
'1'
'2'
<代码>'9'是连续的。
'0'+3
必须等于
'3'

这适用于任何字符集:公共字符集或其他字符集

'0'
中减去得到数值差

s=s+a[1]-'0' //  0 + asci value of 2 i.e 50 - asci value of 0 i.e 48 = 2
。。。上述十进制数字列表中0后的每个字符的值应大于前一个字符的值。。。C11dr§5.2.1 3


'2'
的代码是
50
'0'
的代码也是
48
。所以
50
-
48
2
。您希望/希望它打印什么?问题搞错了。不建议使用mobile编写stackoverflow。
scanf(“%s”,a)-->
scanf(“%11s”,a)
printf("%d",'2' - '0'); // must print 2