有效 VISA:4222222222222 输出为无效

Valid VISA: 4222222222222 outputted as invalid

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

INSTRUCTIONS: Write a program that prompts the user for a credit card number and then reports (via printf) whether it is a valid American Express, MasterCard, or Visa card number, per the definitions of each’s format herein. So that we can automate some tests of your code, we ask that your program’s last line of output be AMEX\n or MASTERCARD\n or VISA\n or INVALID\n, nothing more, nothing less

#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
    {
       .....


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

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

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

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

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