如何修复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
相关产品推荐
相关产品推荐

