鱼C论坛

 找回密码
 立即注册
查看: 1599|回复: 7

[已解决]有人能解释一下这道题吗

[复制链接]
发表于 2022-4-7 13:37:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 1613551 于 2022-4-7 13:38 编辑

小甲鱼这课后作业真是越来越难了,有人能解释一下下面标出来的那一段代码是什么意思吗?题目如下图



#include <stdio.h>

int main()
{
        int ch;
        int num = 0;

        printf("请输入待转换的字符串:");

        do
        {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                  
num = 10 * num + (ch - '0');[/quote]
                }
                else
                {
                        if (num)
                        {
                                break; // 如果已有数字,则退出循环
                        }
                }

        }
        while (ch != '\n');

        printf("结果是:%d\n", num);

        return 0;
}
最佳答案
2022-4-7 17:16:50
ch 对应 字符'0' - '9'的ascii码
'0''对应 48
‘1’对应 49
以此类推
ch - '0' 得到了一个数,这个数就是赋值给ch的字符
举个例子:
ch = '2',这个时候 ch 的 值是 50 即 ch = 50
ch = '2' 等价于 ch = 50
ch - '0' 就得到了 2

num *10 就代表把之前获得的数字扩大十倍,
比如:12
num = 10*0 +1
num = 1
然后
num = 10*1+2
num = 12
uTools_1649309587102.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-7 13:43:51 | 显示全部楼层

mum=0, ch =1
num = 10 * num + (ch - '0') = 0+ 1 = 1

mum=1,  ch =2
10 * num + (ch - '0') = 10 + 2 = 12

解析:
10 * num 实现右移位

(ch - '0') 实现把当前字符转整

合在一起就是题 义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-7 14:56:24 | 显示全部楼层
本帖最后由 x3322699 于 2022-4-7 15:07 编辑

去看一下,ASCLL码表     调试  来看每次循环里ch(这里会进行隐式转换)里的值是多少   10 * num    第一次循环是存个位,第二次会存十位,....然后存百位存千位。。。。        (ch - '0') 实现把当前字符转整   前面那个if会只转'0'...'9'之间的数字  去看看'9' -'0'会变成什么
ASCLL码表 能自己手动算算,更好理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-7 16:10:56 | 显示全部楼层
ba21 发表于 2022-4-7 13:43
mum=0, ch =1
num = 10 * num + (ch - '0') = 0+ 1 = 1

前面的看懂了,后面(ch - '0') 实现把当前字符转整我还是理解不了,为什么这样子可以转整啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-7 16:15:30 | 显示全部楼层
x3322699 发表于 2022-4-7 14:56
去看一下,ASCLL码表     调试  来看每次循环里ch(这里会进行隐式转换)里的值是多少   10 * num    第一 ...

救命,我还是理解不了,可能等我学到后面再回头看就能看懂了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-7 16:15:40 | 显示全部楼层
1613551 发表于 2022-4-7 16:10
前面的看懂了,后面(ch - '0') 实现把当前字符转整我还是理解不了,为什么这样子可以转整啊

'1'-'0' 等于多少不知道? 去找下ascii码表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-7 17:16:50 | 显示全部楼层    本楼为最佳答案   
ch 对应 字符'0' - '9'的ascii码
'0''对应 48
‘1’对应 49
以此类推
ch - '0' 得到了一个数,这个数就是赋值给ch的字符
举个例子:
ch = '2',这个时候 ch 的 值是 50 即 ch = 50
ch = '2' 等价于 ch = 50
ch - '0' 就得到了 2

num *10 就代表把之前获得的数字扩大十倍,
比如:12
num = 10*0 +1
num = 1
然后
num = 10*1+2
num = 12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-8 09:34:28 | 显示全部楼层
一阵三十六 发表于 2022-4-7 17:16
ch 对应 字符'0' - '9'的ascii码
'0''对应 48
‘1’对应 49

牛逼,这个一看就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 00:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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