fuze11 发表于 2020-5-19 21:56:41

求大神看看

#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;
能不能讲下我错在哪里和答案这个是什么意思

fuze11 发表于 2020-5-19 21:58:24

要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母部分保留原型注意:字母 y 应该被替换为字母 b,而字母 z 应该被替换为字母 c。

sunrise085 发表于 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'
#include <stdio.h>
int main()
{
    int ch;
    printf("请输入:");
    while ((ch=getchar())!='\n')
    {
      if(ch>='a' && ch<='z')
      {
            ch='a' + (ch - 'a' + 3) % 26;
      }
      
      if(ch>='A'&& ch<='Z')
      {
                ch='A' + (ch - 'A' + 3) % 26;
      }
      putchar(ch);
    }
    return 0;
}

Cute_Traver_Cat 发表于 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,

<a=97,z=122>
<举例r=114,x=120>
>>> 38 % 26
12
>>> 114 - 97
17
>>> 17+3
20
>>> 20%26
20
>>> +97
97
>>> 20+97
117
>>> 120 -97
23
>>> 23 +3
26
>>> 26%26
0
>>> 0+97
97
>>>
页: [1]
查看完整版本: 求大神看看