鱼C论坛

 找回密码
 立即注册
查看: 3229|回复: 4

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

[复制链接]
发表于 2021-12-4 23:51:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
最佳答案
2021-12-5 00:33:14
本帖最后由 jackz007 于 2021-12-5 00:39 编辑
  1.         int num = 0;
  2.         printf("请输入待转换的字符串;");
  3.         do
  4.         {
  5.                 ch =getchar();
  6.                 if(ch >= '0' && ch<= '9')
  7.                 {
  8.                         num = 10 * num + (ch - '0');
  9.                 }
  10.                  else
  11.                 {
  12.                          break;//如果有数字,则退出循环
  13.                 }
  14.         } while (ch != '\n') ;
复制代码

        假设先后键入了 '9'、'3'、'5'、'\n'
        那么,这个 while 将会循环 4 次。
  1. 【第1次】:num = 0   , ch =  '9' , num = 10 * num + (ch - '0') = 10 *  0 + ('9' - '0') =   9
  2. 【第2次】:num = 9   , ch =  '3' , num = 10 * num + (ch - '0') = 10 *  9 + ('3' - '0') =  93
  3. 【第3次】:num = 93  , ch =  '5' , num = 10 * num + (ch - '0') = 10 * 93 + ('5' - '0') = 935
  4. 【第4次】:num = 935 , ch = '\n' , 退出循环
复制代码

        这样,'9'、'3'、'5' 就被变成了 935,是不是很神奇?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 00:33:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-12-5 00:39 编辑
  1.         int num = 0;
  2.         printf("请输入待转换的字符串;");
  3.         do
  4.         {
  5.                 ch =getchar();
  6.                 if(ch >= '0' && ch<= '9')
  7.                 {
  8.                         num = 10 * num + (ch - '0');
  9.                 }
  10.                  else
  11.                 {
  12.                          break;//如果有数字,则退出循环
  13.                 }
  14.         } while (ch != '\n') ;
复制代码

        假设先后键入了 '9'、'3'、'5'、'\n'
        那么,这个 while 将会循环 4 次。
  1. 【第1次】:num = 0   , ch =  '9' , num = 10 * num + (ch - '0') = 10 *  0 + ('9' - '0') =   9
  2. 【第2次】:num = 9   , ch =  '3' , num = 10 * num + (ch - '0') = 10 *  9 + ('3' - '0') =  93
  3. 【第3次】:num = 93  , ch =  '5' , num = 10 * num + (ch - '0') = 10 * 93 + ('5' - '0') = 935
  4. 【第4次】:num = 935 , ch = '\n' , 退出循环
复制代码

        这样,'9'、'3'、'5' 就被变成了 935,是不是很神奇?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-5 10:48:58 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int c, num = 0;
  5.     printf("请输入待转换的字符串:");
  6.     while((c = getchar()) != '\n') num = (num*10) + (c -'0');
  7.     printf("结果是:%d", num);
  8.     return 0;
  9. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 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')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-5 01:38:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表