CS50 Pset2 Caesar代码输出匹配但check50报错求助
问题分析与修复
你的Caesar密码代码本地输出看似正常,但check50检测失败的核心原因是循环处理了字符串的终止符\0,导致输出中包含了一个不可见的空字符——肉眼无法察觉,但check50的测试用例对输出格式要求严格,会识别到这个多余字符并判定不匹配。
具体问题点
在main函数的加密输出部分:
int lng = strlen(plain)+1; for (int a = 0; a < lng ;a++) { printf("%c", crypt(key, plain[a])); }
strlen(plain)返回的是字符串的有效字符长度(不包含末尾的\0),你额外加1后,循环会遍历到plain[strlen(plain)],也就是字符串的终止符\0。crypt函数会直接返回该字符,printf输出它后,会产生check50能检测到的多余输出。
修复方案
将循环长度改为strlen(plain),无需加1:
int lng = strlen(plain); for (int a = 0; a < lng ;a++) { printf("%c", crypt(key, plain[a])); }
修改后循环仅处理字符串中的有效字符,不会触及终止符\0,输出即可完全符合check50的测试要求。
额外说明
你的crypt函数逻辑完全正确,字母的偏移处理没有问题,仅需修正循环范围即可通过检测。
内容的提问来源于stack exchange,提问作者Emre Kırmızı
相关产品推荐
相关产品推荐

