下面程序运行结果是怎么得来的?

char ch[]="600";
int a,s=0;
for(a=0;ch[a]>='0'&&ch[a]<='9';a++)
s=10*s+ch[a]-'0';
printf("%d",s);
还有一题:
char x[]="the teacher";
i=0;
while (x[++i]!='\0') if(x[i-1]=='t') printf("%c",x[i]);

每次从ch数组中取一个字符
第一次取'6',第二次取'0',第三次取'0'
在拼接的时候用s=10*s+ch[a]-'0';减去'0'是转化成整数,比如'6'-'0'=6;每次乘以10是进位
具体过程就是
s=10*0+'6'-'0'=6;
s=10*6+'0'-'0'=60;
s=10*60+'0'-'0'=600;追问

ch[a] ,‘0’的值怎么算的,下面还有一题呢? 怎么楼下的和你不一样?

追答

‘0’-‘0’=0,在ascii码中字符'0'就等于十进制的48,他的30指的是十六进制的,0x30=48
第二题的话就是打印字符串中字符t后面的那个字符

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-05
第1个for循环:
s=10*0+36-30=6
第2个for循环:
s=10*6+30-30=60
第3个for循环:
s=10*60+30-30=600;追问

ch[a] ,‘0’的值怎么算的,下面还有一题呢?

追答

'0'在C中表示字符,对应ASCII码就30

相似回答