鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 10

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

[复制链接]
发表于 2022-9-5 23:40:54 | 显示全部楼层 |阅读模式

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

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

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

int main() { 微信截图_20220905234013.png
        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: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;
}
(只是微调了几个地方)

我可能要去睡觉了,以后可能没法回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-6 00:14:51 | 显示全部楼层

我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-6 00:16:34 | 显示全部楼层
本帖最后由 临时号 于 2022-9-6 00:17 编辑
阿亮不减肥 发表于 2022-9-6 00:14
我的写的是有啥问题嘛;我感觉逻辑是对的;但是实际结果不对


可以说问题还是很大的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
(只是微调了几个地方)

我可能要去睡觉了,以后可能没法回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-6 00:43:28 | 显示全部楼层

谢谢,大佬,明白哪里错误了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-6 00:44:05 | 显示全部楼层
额外减小 发表于 2022-9-6 00:26
知道了
你没有考虑运算符的优先级
赋值号的优先级应该是要小于“小于号”的

谢谢大佬,明白哪里错了,主要是优先级哪里有问题,已解决;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
请输入明文:Hello,World!
Khoor,Zruog!
请输入密文:Khoor,Zruog!
Hello,World!

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-6 14:29:06 | 显示全部楼层
jackz007 发表于 2022-9-6 10:41
凯撒密码而已,算法很简单

        编译、运行实况:

666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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