将字符数据类型打印为整数数据类型 #包括 main() { chara[12]; scanf(“%s”,a); int s=0; s=s+a[1]; printf(“%d”,s); } 例子: a=1234 产量:50
这是一个基本的c程序。当我试图打印s的值时,它显示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("%
但是当我用
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