鱼C论坛

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

[已解决]百思不得其解

[复制链接]
发表于 2018-12-15 17:36:12 | 显示全部楼层 |阅读模式

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

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

x
这段代码中 putchar('a' + (ch - 'a' + 3) % 26);为什么要这么用呢?
putchar(ch + 3);也一样可以正常运行啊!


还有还有,谁帮我解释一下getchar()返回值的问题啊?返回的是成功获取字符的数量?它不是一次获取一个字符吗?获取后用什么格式表达啊,ascll码还是字符本身?比如printf("%d",ch)和printf("%c",ch)


可能描述的有点乱,帮我详细分析一下吧!谢谢大家啦!
最佳答案
2018-12-15 19:20:28
本帖最后由 TyCk 于 2018-12-15 19:29 编辑

1.getchar()的返回值问题,不是成功获取字符的数量,这个函数本身是用来逐个读取字符的,返回值是整数类型,代表的用户输入的字符的ASCII码,如果读取出错,返回-1;如果类比的话,大概相当于你写的printf("%d",ch)。
2.putchar(ch + 3)可以正常运行???如果楼主这样认为,说明你没有实际测试过。
看了下你的代码,这段代码应该是对26个字母进行加密,加密方法是将字母对应为字母后面的第三个字母,最后三个字母依次对应a、b、c,构成一个循环。
具体来说,putchar('a' + (ch - 'a' + 3) % 26);这行代码处,代码本意应当是26个字母中,输入a,则输出d,输入b,则输出e,其中原理楼主是否清楚?简单来说就是a的ASCII码为97,加3后为100,对应的字符是d,同理类推。
那么问题来了,如果是改写为你所说的putchar(ch + 3),则当ch=122,也就是对应字母z时,ch+3=125,对应字符},不符合输出字母c的本意,所以要进行对26取余的操作,应当不需要细说了。


另外,楼上说的有理,可以提供源码的话,就提供文本形式的源码,方便大家调试查看问题;
“putchar(ch + 3);也一样可以正常运行啊”,这种话不要随便下定论哦,你的这段代码应该是用来作为教学示例用的吧,修改之后,没有经过充分的测试,不要觉得能达到相同的效果,而且什么叫可以正常运行呢,改成"ch=100",也可以正常运行,无非是得不到想要的效果了。所以测试的话,一定要充分,可以多试一下边界值。
KOS9OJIW}MBAA[TR`{HL`18.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-15 19:20:09 | 显示全部楼层
如果你愿意把代码贴出来的话,这个问题你已经得到答案了(能复制的那种代码,图片上面的复制不了)
这也意味着,如果你以后愿意把能复制的那种代码贴出来,你的问题会更容易得到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-15 19:20:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 TyCk 于 2018-12-15 19:29 编辑

1.getchar()的返回值问题,不是成功获取字符的数量,这个函数本身是用来逐个读取字符的,返回值是整数类型,代表的用户输入的字符的ASCII码,如果读取出错,返回-1;如果类比的话,大概相当于你写的printf("%d",ch)。
2.putchar(ch + 3)可以正常运行???如果楼主这样认为,说明你没有实际测试过。
看了下你的代码,这段代码应该是对26个字母进行加密,加密方法是将字母对应为字母后面的第三个字母,最后三个字母依次对应a、b、c,构成一个循环。
具体来说,putchar('a' + (ch - 'a' + 3) % 26);这行代码处,代码本意应当是26个字母中,输入a,则输出d,输入b,则输出e,其中原理楼主是否清楚?简单来说就是a的ASCII码为97,加3后为100,对应的字符是d,同理类推。
那么问题来了,如果是改写为你所说的putchar(ch + 3),则当ch=122,也就是对应字母z时,ch+3=125,对应字符},不符合输出字母c的本意,所以要进行对26取余的操作,应当不需要细说了。


另外,楼上说的有理,可以提供源码的话,就提供文本形式的源码,方便大家调试查看问题;
“putchar(ch + 3);也一样可以正常运行啊”,这种话不要随便下定论哦,你的这段代码应该是用来作为教学示例用的吧,修改之后,没有经过充分的测试,不要觉得能达到相同的效果,而且什么叫可以正常运行呢,改成"ch=100",也可以正常运行,无非是得不到想要的效果了。所以测试的话,一定要充分,可以多试一下边界值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-12-16 14:46:01 | 显示全部楼层
TyCk 发表于 2018-12-15 19:20
1.getchar()的返回值问题,不是成功获取字符的数量,这个函数本身是用来逐个读取字符的,返回值是整数类型 ...

非常感谢解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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