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

CS50凯撒密码(caesar)check50单测未过,输出与预期一致报错咨询

问题定位

你的代码存在两处会导致check50校验失败的问题,其中核心问题是输出逻辑错误:

  • 第一处:非字母字符的处理存在重复输出
    当遍历到非字母字符时,你在if(!isalpha(text[b]))分支中已经直接打印了原字符,但是分支外还有一句无条件的printf("%c", cipher);。此时cipher的初始值为0,对应ASCII表中的空字符(不可见),相当于所有非字母字符后都多追加了一个不可见的空字符,肉眼查看输出完全一致,但check50的逐字节校验会判定输出不匹配。
  • 第二处:输入提示不符合要求
    CS50凯撒作业要求输入明文的提示语为严格的plaintext: ,你的代码中写的是Plain text: ,首字母大写且多了空格,也可能触发校验失败。
修复方案

调整非字母字符的处理逻辑,删除非字母分支中的单独打印,统一通过cipher变量输出所有字符即可,参考修改后的核心逻辑:

for (int b = 0, n = strlen(text); b < n; b++)
{ 
    int k = 0;
    int cipher = 0;
     
    if(!isalpha(text[b]))
    {  
        cipher = text[b];
    }   
    else if (islower(text[b]))
    { 
        int t = text [b] - 'a';
        k = (t + atoi(word[1])) % 26;
        cipher = k + 'a';
    }
    else if (isupper(text[b]))
    {
        int t = text [b] - 'A';
        k = (t + atoi(word[1])) % 26;
        cipher = k + 'A';
    }
    // 统一输出,避免重复打印
    printf("%c", cipher);
}

同时把输入提示修改为string text = get_string("plaintext: ");即可通过校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:08