【问题标题】:Valid VISA: 4222222222222 outputted as invalid有效签证:4222222222222 输出无效
【发布时间】:2020-12-17 11:48:58
【问题描述】:

当通过 cs50 的 submit50 检查运行我的程序时,除了验证 4222222222222 之外,一切正常,因为输出了 VISA(而不是 INVALID)。当我之前打印出count变量时,有时会输出VISA。任何解决方案都将不胜感激,因为我似乎无法正确解决此问题。

说明:编写一个程序,提示用户输入信用卡号,然后根据此处每种格式的定义报告(通过printf)它是有效的美国运通卡、万事达卡还是维萨卡号。为了使我们可以对您的代码进行一些自动化测试,我们要求您的程序的最后一行输出为 AMEX\nMASTERCARD\nVISA\nINVALID\n,仅此而已

#include <stdio.h>
#include <cs50.h>


int main(void)
{
    //get input from user
    long CardNum = get_long("Input credit card number:");

    bool nvalid = true;
    //count number of digits
    int count = 0;
    long temp1num = CardNum;
    while (temp1num > 0)
    {
        temp1num = temp1num / 10;
        count++;
    }

    //printf("%i\n", count);

    if (!(count == 13 || count == 15 || count == 16))
    {
        printf("INVALID\n");
    }

    else
    {
       .....


问题出现在代码的开头,所以我只复制了那部分。

【问题讨论】:

    标签: c cs50 credit-card luhn


    【解决方案1】:

    万事达卡总是以 5 或 2 开头,长度为 16。

    Visa 卡总是以 4 开头,长度可以是 13-16-19。

    你很接近。尝试在 if 语句中为 VISA 支持的长度添加一个附加条件,它应该可以解决您的问题。或者,为什么不检查卡片长度是否为 13 - 19?它似乎失败了,因为 Visa 支持不同的卡长度。

    我有一个很棒的帮助方法,可以确定卡片类型,非常方便,但它是用 C# 编写的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多