鱼C论坛

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

[已解决]求大神看看

[复制链接]
发表于 2020-5-19 21:56:41 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
main()
{
        int ch;
        printf("请输入");
        while ((ch=getchar())!='\n')
        {
                if(ch>='a'&&ch<='z')
                {
                        ch=ch+3;
                }
               
                if(ch>='A',ch<='Z')
                {
                        ch=ch+3;
                }
        }
       
        putchar('\n');
}这是我写的
  putchar('a' + (ch - 'a' + 3) % 26);这是答案中if里面的
                        continue;
能不能讲下我错在哪里和答案这个是什么意思
最佳答案
2020-5-19 23:59:21
本帖最后由 sunrise085 于 2020-5-20 00:01 编辑

你一楼写的有点乱,没看太明白。
程序的逻辑问题是,没考虑xyz和XYZ自加3之后超出字母范围,将之改为abc和ABC的情况。
putchar('a' + (ch - 'a' + 3) % 26);这个就考虑到了把最后的三个字符改为最前面三个字符的情况。
假设输入字符是ch= ‘’‘’x ,'a' + (ch - 'a' + 3) % 26得到的就是'a';若输入的是ch='h','a' + (ch - 'a' + 3) % 26得到的就是'k'
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int ch;
  5.     printf("请输入:");
  6.     while ((ch=getchar())!='\n')
  7.     {
  8.         if(ch>='a' && ch<='z')
  9.         {
  10.             ch='a' + (ch - 'a' + 3) % 26;
  11.         }
  12.         
  13.         if(ch>='A'&& ch<='Z')
  14.         {
  15.                 ch='A' + (ch - 'A' + 3) % 26;
  16.         }
  17.         putchar(ch);
  18.     }
  19.     return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-19 21:58:24 | 显示全部楼层
要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母部分保留原型注意:字母 y 应该被替换为字母 b,而字母 z 应该被替换为字母 c。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 23:59:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-5-20 00:01 编辑

你一楼写的有点乱,没看太明白。
程序的逻辑问题是,没考虑xyz和XYZ自加3之后超出字母范围,将之改为abc和ABC的情况。
putchar('a' + (ch - 'a' + 3) % 26);这个就考虑到了把最后的三个字符改为最前面三个字符的情况。
假设输入字符是ch= ‘’‘’x ,'a' + (ch - 'a' + 3) % 26得到的就是'a';若输入的是ch='h','a' + (ch - 'a' + 3) % 26得到的就是'k'
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int ch;
  5.     printf("请输入:");
  6.     while ((ch=getchar())!='\n')
  7.     {
  8.         if(ch>='a' && ch<='z')
  9.         {
  10.             ch='a' + (ch - 'a' + 3) % 26;
  11.         }
  12.         
  13.         if(ch>='A'&& ch<='Z')
  14.         {
  15.                 ch='A' + (ch - 'A' + 3) % 26;
  16.         }
  17.         putchar(ch);
  18.     }
  19.     return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 00:01:42 | 显示全部楼层
本帖最后由 Cute_Traver_Cat 于 2020-5-20 00:04 编辑

应该是错在最后三个字母的问题,小写字母转换后会成为大写x->A,y->B,z->C
ascii转换如下
应该是错在最后三个字母的问题,小写字母转换后会成为大写x->A,y->B,z->C,

  1. <a=97,z=122>
  2. <举例r=114,x=120>
  3. >>> 38 % 26
  4. 12
  5. >>> 114 - 97
  6. 17
  7. >>> 17+3
  8. 20
  9. >>> 20%26
  10. 20
  11. >>> +97
  12. 97
  13. >>> 20+97
  14. 117
  15. >>> 120 -97
  16. 23
  17. >>> 23 +3
  18. 26
  19. >>> 26%26
  20. 0
  21. >>> 0+97
  22. 97
  23. >>>
复制代码
[/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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