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

如何修复C#加密程序加密后本应输出Z却变为@的问题

问题根因

代码存在边界判断逻辑错误:

  • 现有判断条件Convert.ToChar(ch + shift) < 'Z'仅允许移位后ASCII值严格小于'Z'(ASCII值90)的字符直接输出,移位后刚好等于'Z'的场景会进入else分支执行减26操作
  • 'Z'的ASCII值减26结果为64,对应字符即为@,与错误输出现象完全匹配
修复方案

将判断条件中的<修改为<=即可解决问题,修正后的对应代码段如下:

if (Char.IsUpper(ch))
{
    // 原逻辑为 < 'Z',调整为 <= 'Z' 覆盖等于Z的合法场景
    if (Convert.ToChar(ch + shift) <= 'Z')
        Console.Write(Convert.ToChar(ch + shift));
    else 
        Console.Write(Convert.ToChar(ch + shift - 26));
}

也可以使用模26运算简化逻辑,从根源避免边界判断失误:

if (Char.IsUpper(ch))
{
    int charOffset = (ch - 'A' + shift) % 26;
    Console.Write((char)('A' + charOffset));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:09