有人能解释一下这道题吗
本帖最后由 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');
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
}
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') 实现把当前字符转整
合在一起就是题 义。 本帖最后由 x3322699 于 2022-4-7 15:07 编辑
去看一下,ASCLL码表 调试来看每次循环里ch(这里会进行隐式转换)里的值是多少 10 * num 第一次循环是存个位,第二次会存十位,....然后存百位存千位。。。。 (ch - '0') 实现把当前字符转整 前面那个if会只转'0'...'9'之间的数字去看看'9' -'0'会变成什么
ASCLL码表 能自己手动算算,更好理解。 ba21 发表于 2022-4-7 13:43
mum=0, ch =1
num = 10 * num + (ch - '0') = 0+ 1 = 1
前面的看懂了,后面(ch - '0') 实现把当前字符转整我还是理解不了,为什么这样子可以转整啊 x3322699 发表于 2022-4-7 14:56
去看一下,ASCLL码表 调试来看每次循环里ch(这里会进行隐式转换)里的值是多少 10 * num 第一 ...
救命,我还是理解不了,可能等我学到后面再回头看就能看懂了吧 1613551 发表于 2022-4-7 16:10
前面的看懂了,后面(ch - '0') 实现把当前字符转整我还是理解不了,为什么这样子可以转整啊
'1'-'0' 等于多少不知道? 去找下ascii码表 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
一阵三十六 发表于 2022-4-7 17:16
ch 对应 字符'0' - '9'的ascii码
'0''对应 48
‘1’对应 49
牛逼,这个一看就懂了
页:
[1]