鱼C论坛

 找回密码
 立即注册
查看: 1630|回复: 3

[已解决]S1E13课后作业求解答

[复制链接]
发表于 2017-4-16 08:41:35 | 显示全部楼层 |阅读模式

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

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

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
                {
                        if (num)
                        {
                                break; // 如果已有数字,则退出循环
                        }
                }

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

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

        return 0;
}

其中 num = 10 * num + (ch - '0');      和   if (num) 代码是什么意思 求各位大神解答。
最佳答案
2017-4-17 00:12:56
15917579239 发表于 2017-4-16 23:39
大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能 ...

这是数字的转换不是大小写字母的转换,ch-'0'就是实现转换成实际数字的,因为当你输入的用getchar()获取回来的一定是一个字符,而数字0-9字符ASCII中的值是48-57,当你ch-'0'就是你的数字对应的ASCII码的值减去48即0的ASCII的值,得出来刚好就是对应数字字符的值举个栗子,比如ch是'9' 那么ch-'0'就是57-48 结果就是9
getchar()这个函数是每次只获取一个字符,当你输入的是一个两位数,会先分别获取你的十位数,再获取你的个位数,比如我输入48,先获取十位数, num = 10 * num + (ch - '0'); num初始值为0,那么num= ('4'-'0'),num结果就是就是4,然后再获取个位数,这个时候num为4那么 num = 10* 4 + ('8'-'0')得出来就是48了
你自己一步一步画个图看一下就能懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-16 11:04:02 | 显示全部楼层
num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后输入的数值就是你输入的数字实际数值了,比如你输入56,先被处理的是5,(ch - '0')这一句计算出你的字符就是数字5,这个你看下ASCII数码表就知道,不懂再问我,num原本为0,处理后num就是5,然后再处理6,最后num的值就是5*10+6就是56了
if (num) 在编程语言中,非0的值就是True,所以当计算出num有实际的值而且非0就会进入这个if条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-16 23:39:42 | 显示全部楼层
lumber2388779 发表于 2017-4-16 11:04
num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后 ...

大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能实现大小写字母转换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-17 00:12:56 | 显示全部楼层    本楼为最佳答案   
15917579239 发表于 2017-4-16 23:39
大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能 ...

这是数字的转换不是大小写字母的转换,ch-'0'就是实现转换成实际数字的,因为当你输入的用getchar()获取回来的一定是一个字符,而数字0-9字符ASCII中的值是48-57,当你ch-'0'就是你的数字对应的ASCII码的值减去48即0的ASCII的值,得出来刚好就是对应数字字符的值举个栗子,比如ch是'9' 那么ch-'0'就是57-48 结果就是9
getchar()这个函数是每次只获取一个字符,当你输入的是一个两位数,会先分别获取你的十位数,再获取你的个位数,比如我输入48,先获取十位数, num = 10 * num + (ch - '0'); num初始值为0,那么num= ('4'-'0'),num结果就是就是4,然后再获取个位数,这个时候num为4那么 num = 10* 4 + ('8'-'0')得出来就是48了
你自己一步一步画个图看一下就能懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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