折耳布偶 发表于 2022-7-29 16:02:36

关于do while语句课后作业的问题



在S1E13的课后作业中动动手2:A. 将用户输入的字符串中代表数字的字符转换为整型数值 B. 打印转换结果 C. 只打印第一组数字
答案为
#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');这句怎么解释为什么这么做就把字符转换成了整型数值

临时号 发表于 2022-7-29 16:26:20

举个例子:
如果我输入的是78
首先ch读到了7,但它是字符7,ASII码是55
num = 10 *num + (ch - '0')这句字符0的ASII码是48,55-48=7,num是0,所以num=7
首先ch读到了8,但它是字符8,ASII码是56
num = 10 *num + (ch - '0')这句字符0的ASII码是48,56-48=7,num是7,乘10是70,再加上8,所以num=78

折耳布偶 发表于 2022-7-29 19:09:54

临时号 发表于 2022-7-29 16:26
举个例子:
如果我输入的是78
首先ch读到了7,但它是字符7,ASII码是55


原来10*num是为了后面做准备的一下就明白了感谢
页: [1]
查看完整版本: 关于do while语句课后作业的问题