当通过cs50的submit50检查运行我的程序时,除了验证
4222222222222
之外,一切正常,因为输出VISA
(而不是INVALID
)。当我之前打印count变量时,有时会输出VISA
。任何解决方案将不胜感激,因为我似乎无法正确解决这个问题。
说明:编写一个程序,提示用户输入信用卡号,然后根据此处每种格式的定义报告(通过
)它是否是有效的美国运通卡、万事达卡或维萨卡号。为了使我们能够自动对您的代码进行一些测试,我们要求您的程序的最后一行输出是printf
或AMEX\n
或MASTERCARD\n
或VISA\n
,仅此而已INVALID\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
{
.....
问题出现在代码的开头,所以我只复制了那部分。
万事达卡始终以 5 或 2 开头,长度为 16。
Visa 卡始终以 4 开头,长度为 13-16-19。
你很接近。尝试在 if 语句中添加 VISA 支持的长度的附加条件,它应该可以解决您的问题。或者,为什么不直接检查卡片长度是否为 13 - 19?看来失败是因为 Visa 支持不同的卡长度。
我有一个很棒的辅助方法,可以确定卡片类型,非常方便,但它是用 C# 编写的。
我不知道你为什么强迫我这样做