You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

凯撒密码加密代码运行无输出,请求技术协助

排查凯撒密码代码输出空白的问题

嘿,我帮你仔细看了下这段C代码,输出空白的问题主要是几个关键错误导致的,咱们一步步来修正:

核心错误分析

  • 未初始化的循环变量误用:你用y作为循环的计数器(for (y=0;y<strlen(text);y++)),但循环体里却一直在用未赋值的i访问text[i]——i的值是随机的,大概率指向的不是你输入的字符串内容,自然取不到有效的字母字符,也就不会进入输出分支。
  • 逻辑错误的字符判断条件:你的判断语句text[i]>='a'&&text[i]<='z'&&text[i]>='A'&&text[i]<='Z'完全不成立,一个字符不可能同时既是小写字母又是大写字母!这里应该用**逻辑或(||)**把两个范围分开,改成(text[y]>='a'&&text[y]<='z') || (text[y]>='A'&&text[y]<='Z')。
  • 输出了原字符而非加密结果:你计算了加密后的c,但输出的却是原始的text[i],而且还加了\n换行,就算条件成立,也只会输出原字符,不是加密后的内容。
  • 变量重复定义:你在main开头已经定义了int c,循环里又重新定义了int c=(int)text[i]+x;,这会导致编译错误(C89标准下)或者隐藏外层变量,干扰逻辑。
  • 未处理字母溢出:凯撒密码需要处理移位后超出字母范围的情况,比如z加2应该变成b,而不是ASCII码里的{,这部分你完全没做,会导致非字母的奇怪字符输出。
  • 不安全的gets函数:gets已经被C标准废弃了,容易导致缓冲区溢出,建议换成fgets来读取输入。

修正后的完整代码

#include <stdio.h>
#include <string.h>

int main() {
    int key, i;
    char text[20];
    
    printf("Enter the plaintext: ");
    // 用fgets替代gets,同时去掉末尾的换行符
    fgets(text, sizeof(text), stdin);
    text[strcspn(text, "\n")] = '\0'; // 移除fgets读取的换行符
    
    printf("Enter the key: ");
    scanf("%d", &key);
    
    // 先计算一次字符串长度,避免循环里重复计算
    int len = strlen(text);
    for (i = 0; i < len; i++) {
        // 判断是否为小写字母
        if (text[i] >= 'a' && text[i] <= 'z') {
            // 处理溢出:减去'a'得到0-25的范围,加key后取模26,再加回'a'
            char encrypted = (text[i] - 'a' + key) % 26 + 'a';
            printf("%c", encrypted);
        } 
        // 判断是否为大写字母
        else if (text[i] >= 'A' && text[i] <= 'Z') {
            char encrypted = (text[i] - 'A' + key) % 26 + 'A';
            printf("%c", encrypted);
        } 
        // 非字母字符直接输出(可选,根据需求调整)
        else {
            printf("%c", text[i]);
        }
    }
    printf("\n"); // 最后换行
    
    return 0;
}

代码修改说明

  1. 替换gets为fgets,并处理了fgets会读取换行符的问题,确保字符串正确。
  2. 修正了循环变量的使用,统一用i作为计数器,避免未初始化变量的问题。
  3. 拆分了字母判断条件,用if-else if分别处理小写和大写字母,逻辑更清晰。
  4. 增加了溢出处理:通过将字母转换为0-25的范围,取模26来实现循环移位,保证加密后仍然是字母。
  5. 输出加密后的字符,而非原字符,并且去掉了多余的换行,让输出是完整的加密字符串。
  6. 增加了非字母字符的处理(直接输出),你可以根据需求调整这部分逻辑。

内容的提问来源于stack exchange,提问作者Gagan Batra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:22:35