wx_T23d31O2 发表于 2019-11-27 20:10:23

while语句课后作业问题

问题是C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。
答案 #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;
}
答案里面if里num = 10* num + (ch - '0')是什么意思啊?

windows 发表于 2019-11-27 21:57:44

例如: ch = '2'时   10* num + (ch - '0')=10 * 0 + (ch的assic码 - '0')    ch的ASCII码是32H而'0'的ASCII码是30H   32H - 30H =2         所以   10 * 0 + (2)=0+2   = 2       如果不知道什么是ASCII码请百度

wx_T23d31O2 发表于 2019-11-27 23:23:03

windows 发表于 2019-11-27 21:57
例如: ch = '2'时   10* num + (ch - '0')=10 * 0 + (ch的assic码 - '0')    ch的ASCII码是32H而'0 ...

我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num

windows 发表于 2019-11-28 08:13:30

wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num

你咋想的,直接用ch-'0'那不是每次把num覆盖了,那你输入字符串都是输出一个数,并没有达到效果啊
每次*10是把ch-'0'的值给num的个位数。

笨小孩丶 发表于 2019-11-28 10:17:41

wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num

比如你输入15,ch=getchar(),会先读取1,运行一遍循环,在读取5,在运行一遍循环。

wx_T23d31O2 发表于 2019-11-28 15:36:27

wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num

懂了 *10就是为了往高位进1位保留下来然后再读取下一个数 对吧
页: [1]
查看完整版本: while语句课后作业问题