一个不太理解的C语言问题


1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     char s[100];
 6     char name[][10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
 7     int sum = 0;
 8     scanf("%s",s);
 9     for(int i=0; s[i] != '\0'; i++)
10     {
11         sum = sum + (s[i] - '0');
12     }
13     int asum[5];    //存储sum中的每个数
14     int j;
15     for(j=0; sum >= 10; j++)
16     {
17         asum[j] = sum % 10;
18         sum /= 10;
19      } 
20      asum[j] = sum;    //记录将sum中第一位数 
21      while(j>=0)
22      {
23          if(j != 0)
24              printf("%s ", name[asum[j]]);
25          else
26              printf("%s\n",name[asum[j]]);
27          j--;
28       } 
29     return 0;
30 }

img


这两个乡间是什么意思,为什么可以这样写?

这个'0' 是一个字符'0' 对应ASII码表上的字符'0' 字符'0'对应的十进制值为48 '1':49 '2':50 ......
拿S[i]-'0' 是为了转换成十进制的数值
例如: s[i]为 字符'1'
s[i] - '0' 就是十进制 的 1

希望对题主有所帮助,可以的话,帮忙点个采纳!

s[i]是char类型的变量,它存储的是字符的ASCII码值,要把这个字符转换为整型,只需要将其与字符'0'相减就是对应的整型数字。
比如: char '0' -> int 48, char ‘1’ -> int 49, 那么'1' - '0' = 1