阿亮不减肥 发表于 2022-9-5 23:40:54

要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母...

#include <stdio.h>//感觉逻辑是没有什么问题,但是输出结果为方框;

int main() {
        int ch;
        printf("请输入明文:");
        while ((ch = getchar()) != '\n') {
                if (ch >= 'A' && ch <= 'Z') {
                        if (ch = ch + 3 > 'Z' && ch + 3 <= 'a') {
                                ch = ch - 'Z' + 'A';
                                putchar(ch);
                        } else {
                                ch = ch + 3;
                                putchar(ch);
                        }
                } else if (ch >= 'a' && ch <= 'z') {
                        if (ch = ch + 3 > 'z') {
                                ch = ch - 'z' + 'a';
                                putchar(ch);
                        } else {
                                ch = ch + 3;
                                putchar(ch);
                        }
                } else {
                        putchar(ch);
                }
        }
        return 0;
}

临时号 发表于 2022-9-6 00:01:19

#include <stdio.h>

int main() {
    int ch;
    printf("请输入明文:");
    while ((ch = getchar()) != '\n') {
      if (ch >= 'a' && ch <= 'z'-3)
                {
              ch = ch + 3;
                } else if (ch >= 'A' && ch <= 'Z'-3)
                {
                        ch = ch + 3;
                } else if (ch > 'Z'-3 && ch <= 'Z')
                {
                        ch = 'A' + 3 - ('Z' - ch) - 1;
                } else if (ch > 'z'-3 && ch <= 'z')
                {
                        ch = 'a' + 3 - ('z' - ch) - 1;
                }
                putchar(ch);
    }
    return 0;
}

阿亮不减肥 发表于 2022-9-6 00:14:51

临时号 发表于 2022-9-6 00:01


我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对

临时号 发表于 2022-9-6 00:16:34

本帖最后由 临时号 于 2022-9-6 00:17 编辑

阿亮不减肥 发表于 2022-9-6 00:14
我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对

可以说问题还是很大的

阿亮不减肥 发表于 2022-9-6 00:21:44

临时号 发表于 2022-9-6 00:16
可以说问题还是很大的

#include <stdio.h>// if里面是不是不能再用if了

int main() {
        int ch;
        printf("请输入明文:");
        while ((ch = getchar()) != '\n') {
                if (ch >= 'A' && ch <= 'Z') {
                        if (ch > 'Z' - 3 ) {
                                ch = ch - 'Z' + 'A' + 3;
                        } else {
                                ch = ch + 3;
                        }
                } else if (ch >= 'a' && ch <= 'z') {
                        if (ch >= 'z' - 3) {
                                ch = ch - 'z' + 'a' + 3;
                                putchar(ch);
                        } else {
                                ch = ch + 3;
                                putchar(ch);
                        }
                } else {
                        putchar(ch);
                }
        }
//        while ((ch = getchar()) != '\n') {
//                putchar(ch);

        return 0;
}

临时号 发表于 2022-9-6 00:25:30

阿亮不减肥 发表于 2022-9-6 00:21
#include // if里面是不是不能再用if了

int main() {


改完了
#include <stdio.h>//感觉逻辑是没有什么问题,但是输出结果为方框;

int main() {
      int ch;
      printf("请输入明文:");
      while ((ch = getchar()) != '\n') {
            if (ch >= 'A' && ch <= 'Z') {
                if (ch + 3 > 'Z' && ch + 3 <= 'a') {
                  ch = ch + 3 - 'Z' + 'A' - 1;
                  putchar(ch);
                } else {
                  ch = ch + 3;
                  putchar(ch);
                }
            } else if (ch >= 'a' && ch <= 'z') {
                if (ch + 3 > 'z') {
                  ch = ch + 3 - 'z' + 'a' - 1;
                  putchar(ch);
                } else {
                  ch = ch + 3;
                  putchar(ch);
                }
            } else {
                putchar(ch);
            }
      }
            return 0;
}

额外减小 发表于 2022-9-6 00:26:03

本帖最后由 额外减小 于 2022-9-6 00:30 编辑

知道了
你没有考虑运算符的优先级
赋值号的优先级应该是要小于“小于号”的
所以就着你的代码改成这样#include <stdio.h>
int main()
{
      int ch;
      printf("请输入明文:");
      while ((ch = getchar()) != '\n') {
                if (ch >= 'A' && ch <= 'Z') {
                        if ((ch = ch + 3 )> 'Z') {//原本这行你有个笔误,我帮你删掉了
                              ch = ch - 'Z' + 'A';
                              putchar(ch);
                        } else {
//去掉这行   (重复加了2个3)                            ch = ch + 3;
                              putchar(ch);
                        }
                } else if (ch >= 'a' && ch <= 'z') {
                        if ((ch = ch + 3 )> 'z') {
                              ch = ch - 'z' + 'a';
                              putchar(ch);
                        } else {
//       这行去掉                        ch = ch + 3;
                              putchar(ch);
                        }
                } else {
                        putchar(ch);
                }
      }
      return 0;
}(只是微调了几个地方)

我可能要去睡觉了,以后可能没法回复

阿亮不减肥 发表于 2022-9-6 00:43:28

临时号 发表于 2022-9-6 00:25
改完了

谢谢,大佬,明白哪里错误了!

阿亮不减肥 发表于 2022-9-6 00:44:05

额外减小 发表于 2022-9-6 00:26
知道了
你没有考虑运算符的优先级
赋值号的优先级应该是要小于“小于号”的


谢谢大佬,明白哪里错了,主要是优先级哪里有问题,已解决;{:9_228:}

jackz007 发表于 2022-9-6 10:41:40

本帖最后由 jackz007 于 2022-9-6 10:44 编辑

      凯撒密码而已,算法很简单
#include <stdio.h>

char crypt(char ch , int e)
{
      char b                                                   ;
      if(ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
                b = (ch >= 'a' && ch <= 'z') ? 'a' : 'A'         ;
                ch = b + (26 + ch - b + e) % 26                  ;
      }
      return ch                                                ;
}

int main(void)
{
      char ch                                                ;
      int e = 3                                                ;
      printf("请输入明文:")                                 ;
      while ((ch = getchar()) != '\n') putchar(crypt(ch , e));
      printf("\n")                                             ;
      printf("请输入密文:")                                 ;
      while ((ch = getchar()) != '\n') putchar(crypt(ch , -e)) ;
      printf("\n")                                             ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
请输入明文:Hello,World!
Khoor,Zruog!
请输入密文:Khoor,Zruog!
Hello,World!

D:\\C>

阿亮不减肥 发表于 2022-9-6 14:29:06

jackz007 发表于 2022-9-6 10:41
凯撒密码而已,算法很简单

      编译、运行实况:

666
页: [1]
查看完整版本: 要求:用户输入一行明文(字符串),针对字母进行加密(偏移量设置为 3),非字母...