鱼C论坛

 找回密码
 立即注册
查看: 3166|回复: 31

[已解决]帮帮忙,谢谢啦

[复制链接]
发表于 2023-7-29 21:39:35 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
大家好,小白想问一下就是从16行代码开始,是在表达什么,c语言小白,实在是看不懂,想请教一下,谢谢啦
Screenshot_2023_0729_213524.jpg
最佳答案
2023-7-29 21:58:37
代码流程如下
输入转换字符
循环{
若该字符ASCLL码在0到9之间
{
      将该字符所代表的数字加到num的末尾
}
若检测到换行
{
       退出循环     
}
}
输出转换完了的num
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-29 22:43:16 | 显示全部楼层
emm,退出循环就是不再运行循环内的代码块
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 22:33:27 From FishC Mobile | 显示全部楼层
香蕉那个不拿拿 发表于 2023-7-29 22:26
0-9数字的ASCLL码值是连在一块的即为80 - 89

大佬,退出循环我的理解就是计算机直接将不符合要求的直接舍弃
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:33:24 | 显示全部楼层
香蕉那个不拿拿 发表于 2023-7-29 22:26
0-9数字的ASCLL码值是连在一块的即为80 - 89

《80~89》

评分

参与人数 1鱼币 +1 收起 理由
香蕉那个不拿拿 + 1 看错了是48-57

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:26:39 | 显示全部楼层
本帖最后由 香蕉那个不拿拿 于 2023-7-29 22:42 编辑

0-9数字的ASCLL码值是连在一块的即为48 - 57
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:24:06 | 显示全部楼层
这是因为a这一些字符他的ASCLL值不在0-9之间,也就不是数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:23:06 | 显示全部楼层
123的时候正常遍历
当遍历到aa时
检测到不符合要求
退出循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:22:03 | 显示全部楼层
xzh莫小痕 发表于 2023-7-29 22:16
大佬,我想问一下,ch的ACSII码由getchar()赋值给的,getchar()是有我输入的字符和字符串提供的,如果假 ...

1. 部分字符在运算的时候可以转化成ASCII码,和getchar没有关系
2. 字符串转化不了,字符才可以
3. ascii对照表 -> http://c.biancheng.net/c/ascii/
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:21:58 | 显示全部楼层
xzh莫小痕 发表于 2023-7-29 22:21
大佬,你说的退出循环指的是123aa,123继续循环,aa退出循环是吗

是的
sum保存的值也是123
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 22:21:20 From FishC Mobile | 显示全部楼层
香蕉那个不拿拿 发表于 2023-7-29 22:18
好比输入一下字符“123aa”
前三个数字(字符形式)可以正常读取
但是读取到aa时

大佬,你说的退出循环指的是123aa,123继续循环,aa退出循环是吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:19:15 | 显示全部楼层
本帖最后由 香蕉那个不拿拿 于 2023-7-29 22:21 编辑

40f17c9a1c656e264e8cf18b70e0c852.jpg
ASCLL码对照表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:18:30 | 显示全部楼层
xzh莫小痕 发表于 2023-7-29 22:16
大佬,我想问一下,ch的ACSII码由getchar()赋值给的,getchar()是有我输入的字符和字符串提供的,如果假 ...

好比输入一下字符“123aa”
前三个数字(字符形式)可以正常读取
但是读取到aa时
14行的代码判断他不是数字,会退出循环
字母的ASCLL码值有一张图,等会给你发过来

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +3 收起 理由
xzh莫小痕 + 3 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:16:37 | 显示全部楼层
本帖最后由 liuhongrun2022 于 2023-7-29 22:20 编辑
xzh莫小痕 发表于 2023-7-29 22:08
各位大佬,我好像没看懂,我以我自己有限的知识,说一下我的理解就是,ch=getchar(),指的就是我输入的字符 ...


ch=getchar(),指是接受一个字符
if(ch>='0'&&ch<='9')指的是如果ch为字符型的0-9,那么就执行第16行
第16行的作用,我局个例子
我输入了1234
第一回:收到'1',num = 0*10+1 = 1
第二回:收到'2',num = 1*10+2 = 12
第三回:收到'2',num = 12*10+3 = 123
第三回:收到'2',num = 123*10+4 = 1234

第16行会将num末尾插入新输入的那个数字!!!


给个最佳答案呗

ASCII码对照表:

                               
登录/注册后可看大图

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +3 收起 理由
xzh莫小痕 + 3 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 22:16:14 From FishC Mobile | 显示全部楼层
tommyyu 发表于 2023-7-29 21:58
C语言中,部分字符(包括数字字符)可以与 ASCII 码互相转换。'0' 的 ASCII 码是 48,'1' 的是 49 ,以此类 ...

大佬,我想问一下,ch的ACSII码由getchar()赋值给的,getchar()是有我输入的字符和字符串提供的,如果假设我输入的是有数字有字母的字符串,getchar()ASCII码怎么转化出来的,我比较好奇一个字母的ASCII码是容易转化的,但是字符串是怎么转化的,谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 22:16:13 | 显示全部楼层
好比现在有123这一个字符串
循环一: 16行的num = 10*num +(ch-“0”)即为num = 0 + 1(ch) = 1
循环二      num = 10*num + (ch - “0”) 即为 num = 10 * 1 +2(ch) = 10 + 2 = 12
循环三     num = 10*num + (ch - “0”) 即为 num = 10 * 12 + 3(ch) = 120 + 3 = 123
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 22:08:05 From FishC Mobile | 显示全部楼层
各位大佬,我好像没看懂,我以我自己有限的知识,说一下我的理解就是,ch=getchar(),指的就是我输入的字符串通过ASC码赋值给ch,
if(ch>='0'&&ch<='9'),指的是在字符串中寻找0-9的数字,我看了各位的评论,我还是没懂16行有啥作用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 21:58:37 | 显示全部楼层    本楼为最佳答案   
代码流程如下
输入转换字符
循环{
若该字符ASCLL码在0到9之间
{
      将该字符所代表的数字加到num的末尾
}
若检测到换行
{
       退出循环     
}
}
输出转换完了的num
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 21:58:32 | 显示全部楼层
本帖最后由 tommyyu 于 2023-7-29 22:04 编辑

C语言中,部分字符(包括数字字符)可以与 ASCII 码互相转换。'0' 的 ASCII 码是 48,'1' 的是 49 ,以此类推,'9' 的是 57 。
所以,ch - '0'  将 ch 的 ASCII 值与 '0' 的ASCII值相减。当 ch = '0' 时,原式 = '0' - '0' = 48 - 48 = 0;当 ch = '9' 时,原式 = '9' - '0' = 57 - 48 = 9。
故 ch - '0' 可以将 字符ch 转变为 一个数字,即从 '0' 变成 0,'1' 变成 1。

而 num = 10 * num + (ch - '0') 是在对 num 进行增加位数的操作:
我们先假设读入了 123。
第 1 轮循环,num 原有的值是 0,此时 ch 的值是 '1',操作过后 num = 10 * 0 + 1 = 1
第 2 轮循环,num 原有的值是 1,此时 ch 的值是 '2',操作过后 num = 10 * 1 + 2 = 12
第 3 轮循环,num 原有的值是 12,此时 ch 的值是 '3',操作过后 num = 10 * 12 + 3 = 123

因此,这一句代码实现了在读入一个数字后将其添加到 num 原有数字后面的操作。

评分

参与人数 1荣誉 +3 鱼币 +5 贡献 +3 收起 理由
xzh莫小痕 + 3 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 21:54:16 | 显示全部楼层
其中,do while语句的只要检测到换行,“\n”就会退出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 21:53:23 | 显示全部楼层
这整个代码相当于将一个字符型的数,不管几位,转换为整数型

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
香蕉那个不拿拿 + 1 + 1 完了,说错了

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-29 21:52:43 | 显示全部楼层
本帖最后由 香蕉那个不拿拿 于 2023-7-29 22:00 编辑

故而
这一串代码可以将一串字符中的数字提取出来输出

点评

不,我坚决不同意楼主的看法!: 5.0
不,我坚决不同意楼主的看法!: 5
不,结果是用整形的num接受的,不可能超过整型  发表于 2023-7-29 21:54
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-21 03:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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