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

CS50信用卡项目:部分卡号无输出问题排查求助

CS50信用卡验证程序无输出问题排查

问题根源

你的程序在Luhn校验通过但卡号不符合任何卡种规则时,没有输出任何内容,导致返回空字符串。当前逻辑仅在Luhn校验失败时输出INVALID,但校验通过但卡种不匹配的场景被遗漏,没有对应的输出分支。

代码错误分析

看main函数中的核心判断逻辑:

if (validation(creditCardNo)) {
    if (count == 15 && ( startNumbers == 34 || startNumbers == 37)) {
        printf("AMEX\n");
    }
    else if (count == 16 && ( startNumbers == 51 || startNumbers == 52 || startNumbers == 53 || startNumbers == 54 || startNumbers == 55)) {
        printf("MASTERCARD\n");
    }
    else if ((count == 13 || count == 16) && ( startNumbers / 10 == 4)) {
        printf("VISA\n");
    }
    // 这里缺少分支:校验通过但卡种不匹配时输出INVALID
}else {
    printf("INVALID\n");
}

当卡号通过Luhn校验,但既不是AMEX、MASTERCARD也不是VISA时,程序不会执行任何printf语句,因此返回空字符串,这就是check50测试失败的直接原因。

修复方案

在if (validation(creditCardNo))的代码块末尾添加一个else分支,输出INVALID,确保所有校验通过但卡种不匹配的情况都能正确输出结果。

修复后的main函数相关代码:

if (validation(creditCardNo)) {
    if (count == 15 && ( startNumbers == 34 || startNumbers == 37)) {
        printf("AMEX\n");
    }
    else if (count == 16 && ( startNumbers == 51 || startNumbers == 52 || startNumbers == 53 || startNumbers == 54 || startNumbers == 55)) {
        printf("MASTERCARD\n");
    }
    else if ((count == 13 || count == 16) && ( startNumbers / 10 == 4)) {
        printf("VISA\n");
    }
    else {
        // 校验通过但卡种不匹配,输出INVALID
        printf("INVALID\n");
    }
}else {
    printf("INVALID\n");
}

验证修复效果

修复后,以下测试用例都会正确输出INVALID:

  • 369421438430814(校验通过但不是AMEX/MASTERCARD/VISA)
  • 4062901840(校验通过但位数不符合要求)
  • 3400000000000620(AMEX开头但位数是16位)
  • 430000000000000(VISA开头但位数是15位)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:07:04