15917579239 发表于 2017-4-16 08:41:35

S1E13课后作业求解答

#include <stdio.h>

int main()
{
      int ch;
      int num = 0;

      printf("请输入待转换的字符串:");

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');
                }
                else
                {
                        if (num)
                        {
                              break; // 如果已有数字,则退出循环
                        }
                }

      }
      while (ch != '\n');

      printf("结果是:%d\n", num);

      return 0;
}

其中 num = 10 * num + (ch - '0');      和   if (num) 代码是什么意思 求各位大神解答。

lumber2388779 发表于 2017-4-16 11:04:02

num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后输入的数值就是你输入的数字实际数值了,比如你输入56,先被处理的是5,(ch - '0')这一句计算出你的字符就是数字5,这个你看下ASCII数码表就知道,不懂再问我,num原本为0,处理后num就是5,然后再处理6,最后num的值就是5*10+6就是56了
if (num) 在编程语言中,非0的值就是True,所以当计算出num有实际的值而且非0就会进入这个if条件

15917579239 发表于 2017-4-16 23:39:42

lumber2388779 发表于 2017-4-16 11:04
num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后 ...

大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能实现大小写字母转换

lumber2388779 发表于 2017-4-17 00:12:56

15917579239 发表于 2017-4-16 23:39
大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能 ...

这是数字的转换不是大小写字母的转换,ch-'0'就是实现转换成实际数字的,因为当你输入的用getchar()获取回来的一定是一个字符,而数字0-9字符ASCII中的值是48-57,当你ch-'0'就是你的数字对应的ASCII码的值减去48即0的ASCII的值,得出来刚好就是对应数字字符的值举个栗子,比如ch是'9' 那么ch-'0'就是57-48 结果就是9
getchar()这个函数是每次只获取一个字符,当你输入的是一个两位数,会先分别获取你的十位数,再获取你的个位数,比如我输入48,先获取十位数, num = 10 * num + (ch - '0'); num初始值为0,那么num= ('4'-'0'),num结果就是就是4,然后再获取个位数,这个时候num为4那么 num = 10* 4 + ('8'-'0')得出来就是48了
你自己一步一步画个图看一下就能懂
页: [1]
查看完整版本: S1E13课后作业求解答