鱼C论坛

 找回密码
 立即注册
查看: 2301|回复: 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 编辑
        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,是不是很神奇?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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,是不是很神奇?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-5 01:38:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-6 14:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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