为什么我总是收到无效的反馈?
Why do i keep getting an invalid feedback?
过去 36 小时我一直在研究 cs50 pset1 学分。
我的代码没有产生任何错误,但是当我输入我的银行卡详细信息时,它显示无效,这可能是什么问题。
我是菜鸟,请大家帮忙
#include <stdio.h>
#include <cs50.h>
int main (void)
{
long long ccnumber;
do
{
//Prompting the user for his creditcard number
ccnumber=get_long_long("What is your creditcard number\n");
}
while (ccnumber<= 0);
//validating the credit card number to ascertain if its upto 13. 14 or 16
long long numbers = ccnumber;
int totaldigits = 0;
while (numbers > 0)
{
numbers = numbers/10;
totaldigits++;
}
if(totaldigits != 13 || totaldigits !=14 || totaldigits !=16)
{
printf("Invalid\n");
}
//Starting from the second to last digit
//And multiplying through by 2
int number1 = ((ccnumber/10) % 10) *2;
int number2 = ((ccnumber/1000) % 10) *2;
int number3 = ((ccnumber/100000) % 10) *2;
int number4 = ((ccnumber/10000000) % 10) *2;
int number5 = ((ccnumber/1000000000) % 10) *2;
int number6 = ((ccnumber/100000000000) % 10) *2;
int number7 = ((ccnumber/10000000000000) % 10) *2;
int number8 = ((ccnumber/10000000000000000) % 10) *2;
//Getting the Sum of the first number series
int sum1;
sum1 = (number1 + number2 + number3 + number4 + number5 + number6 + number7 + number8);
//Populating the second number series
int number9 = ccnumber % 10;
int number10 = ((ccnumber/100) % 10);
int number11 = ((ccnumber/10000) % 10);
int number12 = ((ccnumber/1000000) % 10);
int number13 = ((ccnumber/100000000) % 10);
int number14 = ((ccnumber/10000000000) % 10);
int number15 = ((ccnumber/1000000000000) % 10);
int number16 = ((ccnumber/100000000000000) % 10);
int sum2;
sum2 =(number9 + number10 + number11 + number12 + number13 + number14 + number15 + number16);
//Adding sum1 and sum2
int checksum;
checksum = sum1 + sum2;
if (checksum % 10 != 0)
{
printf("invalid/n");
}
//Verifying for visacard(1)
if(totaldigits == 13)
{
printf("Visa\n");
}
// Verifying for visa(2)
if(totaldigits == 16)
{
long long visa;
visa = ccnumber/1000000000000000;
if(visa!=4)
{
printf("Invalid\n");
}
else
{
printf("VISA\n");
}
//Verifying for MasterCard
long long master;
master = ccnumber/100000000000000;
if(master!=51 || master!=52 ||master!=53 ||master!=54 ||master!=55)
{
printf("Invalid\n");
}
else
{
printf("MASTER\n");
}
}
//Verifying for Amex
}
/柜台
您的信用卡号码是多少
2221000000000009
无效的
invalid/nInvalid
无效
首先,你的某些if
条件是错误的。例如,
if(totaldigits != 13 || totaldigits != 14 || totaldigits != 16)
你想检查totaldigits是13还是14还是16,但是你这里检查的是如果totaldigits不是13,则打印invalid或如果 totaldigits 不是 14,则打印 invalid 等等。因此,它总是打印无效。您需要使用 && (AND)
而不是 || (OR)
。
这一行也存在同样的问题
if(master!=51 || master!=52 ||master!=53 ||master!=54 ||master!=55)
另一个问题是你把1个不必要的0放在这一行的除法中,所以它总是产生0。
int number8 = ((ccnumber/10000000000000000) % 10) *2; // 1 zero unnecessary
正如评论中所建议的那样,您可能需要考虑创建一个数组来存储单个数字,而不是使用 16 个不同的整数。当你有一个数组时,你可以在 for 循环中进行除法,这样你就不会与很多零混淆。
作为例子,你可以参考这个 link
A solution for cs50's credit card validation problem .
过去 36 小时我一直在研究 cs50 pset1 学分。 我的代码没有产生任何错误,但是当我输入我的银行卡详细信息时,它显示无效,这可能是什么问题。 我是菜鸟,请大家帮忙
#include <stdio.h>
#include <cs50.h>
int main (void)
{
long long ccnumber;
do
{
//Prompting the user for his creditcard number
ccnumber=get_long_long("What is your creditcard number\n");
}
while (ccnumber<= 0);
//validating the credit card number to ascertain if its upto 13. 14 or 16
long long numbers = ccnumber;
int totaldigits = 0;
while (numbers > 0)
{
numbers = numbers/10;
totaldigits++;
}
if(totaldigits != 13 || totaldigits !=14 || totaldigits !=16)
{
printf("Invalid\n");
}
//Starting from the second to last digit
//And multiplying through by 2
int number1 = ((ccnumber/10) % 10) *2;
int number2 = ((ccnumber/1000) % 10) *2;
int number3 = ((ccnumber/100000) % 10) *2;
int number4 = ((ccnumber/10000000) % 10) *2;
int number5 = ((ccnumber/1000000000) % 10) *2;
int number6 = ((ccnumber/100000000000) % 10) *2;
int number7 = ((ccnumber/10000000000000) % 10) *2;
int number8 = ((ccnumber/10000000000000000) % 10) *2;
//Getting the Sum of the first number series
int sum1;
sum1 = (number1 + number2 + number3 + number4 + number5 + number6 + number7 + number8);
//Populating the second number series
int number9 = ccnumber % 10;
int number10 = ((ccnumber/100) % 10);
int number11 = ((ccnumber/10000) % 10);
int number12 = ((ccnumber/1000000) % 10);
int number13 = ((ccnumber/100000000) % 10);
int number14 = ((ccnumber/10000000000) % 10);
int number15 = ((ccnumber/1000000000000) % 10);
int number16 = ((ccnumber/100000000000000) % 10);
int sum2;
sum2 =(number9 + number10 + number11 + number12 + number13 + number14 + number15 + number16);
//Adding sum1 and sum2
int checksum;
checksum = sum1 + sum2;
if (checksum % 10 != 0)
{
printf("invalid/n");
}
//Verifying for visacard(1)
if(totaldigits == 13)
{
printf("Visa\n");
}
// Verifying for visa(2)
if(totaldigits == 16)
{
long long visa;
visa = ccnumber/1000000000000000;
if(visa!=4)
{
printf("Invalid\n");
}
else
{
printf("VISA\n");
}
//Verifying for MasterCard
long long master;
master = ccnumber/100000000000000;
if(master!=51 || master!=52 ||master!=53 ||master!=54 ||master!=55)
{
printf("Invalid\n");
}
else
{
printf("MASTER\n");
}
}
//Verifying for Amex
}
/柜台 您的信用卡号码是多少 2221000000000009 无效的 invalid/nInvalid 无效
首先,你的某些if
条件是错误的。例如,
if(totaldigits != 13 || totaldigits != 14 || totaldigits != 16)
你想检查totaldigits是13还是14还是16,但是你这里检查的是如果totaldigits不是13,则打印invalid或如果 totaldigits 不是 14,则打印 invalid 等等。因此,它总是打印无效。您需要使用 && (AND)
而不是 || (OR)
。
这一行也存在同样的问题
if(master!=51 || master!=52 ||master!=53 ||master!=54 ||master!=55)
另一个问题是你把1个不必要的0放在这一行的除法中,所以它总是产生0。
int number8 = ((ccnumber/10000000000000000) % 10) *2; // 1 zero unnecessary
正如评论中所建议的那样,您可能需要考虑创建一个数组来存储单个数字,而不是使用 16 个不同的整数。当你有一个数组时,你可以在 for 循环中进行除法,这样你就不会与很多零混淆。 作为例子,你可以参考这个 link A solution for cs50's credit card validation problem .