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

C语言移位加密代码key=3时末尾printf语句失效问题

问题根因分析

你遇到的最后一条printf"无法正常工作"不是语句本身故障,是两个逻辑问题共同导致输出被视觉覆盖:

  • 第一处问题:fgets()读取用户输入时,会把输入完文本按下的回车符('\n',ASCII值为10)存入string数组,代码没有提前剔除这个不属于待加密文本的控制字符,导致它也参与了移位计算。当key=3时,'\n' +3 =13,对应ASCII控制符回车'\r'——这个字符不会显示可见内容,作用是直接把光标移动到当前行的最开头。
  • 第二处问题:最后一条printf()没有在输出内容末尾加换行符,输出完加密字符串后光标不会自动切到新行,等程序运行结束终端打印命令提示符时,会直接从当前行首开始输出,把之前printf打印的所有内容全部覆盖,视觉上就像这条语句完全没执行。
修复方法

修改两处代码即可解决问题:

  1. fgets读取完输入字符串后,手动把末尾的换行符替换成字符串结束符'\0',避免控制字符参与加密:
    fgets(string, 100, stdin);
    // 新增以下代码剔除读入的换行符
    char *newline_pos = strchr(string, '\n');
    if (newline_pos != NULL) {
        *newline_pos = '\0';
    }
    
  2. 最后一条printf的格式字符串末尾加换行符\n,保证输出结束后光标切换到新行,不会被终端提示符覆盖:
    printf("The crypto text in key %d is: %s\n", key, string);
    
可选优化

当前移位逻辑没有处理key大于95、或者key为负数的场景,可以在进入循环前先把key对可打印字符总数(95个,范围是ASCII 32到126)取模,保证任意整数key都能正确移位:

key = key % 95;
if (key < 0) key += 95; // 兼容负密钥的解密场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:33:12