山芋 发表于 2021-6-24 10:08:01

s1e15加密的作业有个地方看不懂,等一个好心大佬

就是每个字母加3输出那个
老师的答案是
putchar('a'+(ch-'a'+3)%26);
我想了一下没想明白为什么要先多一个‘a'然后括号里又减’a'
然后我就写了
putchar((ch+3)%26);
结果果然出错了,输入字母的话输出就是奇怪的东西,但是我想不通为什么

好心大佬救救孩子


jackz007 发表于 2021-6-24 10:08:02

ch                        是 'a' ~ 'z' 的字符,其数值为 97 ~ 122
ch - 'a' = ch - 97          得到一个 0 ~ 25 的数值
ch - 'a' + 3 = ch - 97 + 3这个值加 3 以后,相应的数值范围变为 3 ~ 28
(ch - 'a' + 3)% 26      把 3 ~ 28 的数值范围调整回 0 ~ 25
'a' + (ch - 'a' + 3)% 26得到一个 97 ~ 122 的数值,也就是一个小写字母的 ASCII 编码

山芋 发表于 2021-6-24 10:09:02

第一个输出是没有加减a,输出出错了。第二个是抄的老师的作业,

山芋 发表于 2021-6-25 09:01:18

jackz007 发表于 2021-6-24 11:53


谢谢大佬!
页: [1]
查看完整版本: s1e15加密的作业有个地方看不懂,等一个好心大佬