tucc 发表于 2021-12-4 23:51:30

num = 10 * num + (ch - '0');这串代码有是什么意思?求解

#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
                {
                       break;//如果有数字,则退出循环
                }
        }
        while (ch != '\n');
       
        printf("结果是: %d\n", num);
       
        return 0;
}

jackz007 发表于 2021-12-5 00:33:14

本帖最后由 jackz007 于 2021-12-5 00:39 编辑

      int num = 0;
      printf("请输入待转换的字符串;");
      do
      {
                ch =getchar();
                if(ch >= '0' && ch<= '9')
                {
                        num = 10 * num + (ch - '0');
                }
               else
                {
                         break;//如果有数字,则退出循环
                }
      } while (ch != '\n') ;
      假设先后键入了 '9'、'3'、'5'、'\n'
      那么,这个 while 将会循环 4 次。
【第1次】:num = 0   , ch ='9' , num = 10 * num + (ch - '0') = 10 *0 + ('9' - '0') =   9
【第2次】:num = 9   , ch ='3' , num = 10 * num + (ch - '0') = 10 *9 + ('3' - '0') =93
【第3次】:num = 93, ch ='5' , num = 10 * num + (ch - '0') = 10 * 93 + ('5' - '0') = 935
【第4次】:num = 935 , ch = '\n' , 退出循环
      这样,'9'、'3'、'5' 就被变成了 935,是不是很神奇?

傻眼貓咪 发表于 2021-12-5 10:48:58

#include <stdio.h>

int main()
{
    int c, num = 0;
    printf("请输入待转换的字符串:");
    while((c = getchar()) != '\n') num = (num*10) + (c -'0');
    printf("结果是:%d", num);
    return 0;
}

傻眼貓咪 发表于 2021-12-5 11:10:36

getchar() 用于读取缓冲区字符(ASCII 字符)

ASCII 基本编码为 125,加上 EASCII 共 256,键盘上所有键上的符号都一一对应自己的 ASCII 编码,如:'K' 为 75、'&' 为 38,当然数字 0 至 9 也有属于自己的 ASCII 编码,如:'4' 为 52、'7' 为 55(注:这里的 4 和 7 是以 getchar() 方式取得,形态是字符,不是整数,所以才有 ASCII 编码,如果用 scanf() 可以以 %c 取得字符)

假设 C = 'a':
字符 'a' 对应 ASCII 编码为 97
字符 'A' 对应 ASCII 编码为 65
那么如何将 C 值变成 'A' 呢(也就是 'a' 变成 'A')?

解答:C = C - 'a' + 'A',也就是 'a' - 'a' + 'A' = 97 - 97 + 65 = 65('A')

Zedyasuo 发表于 2022-2-5 01:38:07

傻眼貓咪 发表于 2021-12-5 10:48


好神奇呀{:10_257:}
页: [1]
查看完整版本: num = 10 * num + (ch - '0');这串代码有是什么意思?求解