【发布时间】:2022-10-19 13:09:21
【问题描述】:
我编写了这个程序,用于检查用户输入的卡号的有效性;输出卡的类型(如果有效)或“无效”。
尽管大多数功能单独工作,但在运行程序时,我只得到一个输出。
我哪里错了?
我的代码是:
#include <cs50.h>
#include <stdio.h>
#include <math.h>
long get_number(void);
int calculate_checksum(long number);
int calculate_length(long number);
int calculate_startd(long number);
int calculate_startdv(int startd);
int main(void)
{
long number = get_number();
int checksum = calculate_checksum(number);
int length = calculate_length(number);
int startd = calculate_startd(number);
int startdv = calculate_startdv(startd);
if (checksum == 0 && (length == 13 || length == 16) && startdv == 4)
{
printf("VISA\n");
}
else if (checksum == 0 && length == 15 && (startd == 34 || startd == 37))
{
printf("AMEX\n");
}
else if (checksum ==0 && length == 16 && (startd >= 51 && startd <= 55))
{
printf("MASTERCARD\n");
}
else
{
printf("INVALID\n");
}
}
// get number from user
long get_number(void)
{
long number;
do
{
number = get_long("Number: ");
} while (number <= 0);
return number;
}
// calculate checksum
int calculate_checksum(long number)
{
int d1;
int d2;
int d22;
int p1 = 0;
int p2 = 0;
int total;
int checksum;
do
{
d1 = number % 10;
number /= 10;
p1 += d1;
d2 = number % 10;
number/= 10;
d22 = d2 * 2;
p2 += d22;
} while (number > 0);
total = p1 + p2;
checksum = total % 10;
return checksum;
}
// calculating the length of the card number
int calculate_length(long number)
{
int length = 0;
do
{
number /= 10;
++length;
} while (number > 0);
return length;
}
// work out/ isolate the starting digits of the number
int calculate_startd(long number)
{
int startd;
do
{
startd = number % 10;
number /= 10;
} while (number > 100);
return startd;
}
// isolating the first digit for visa cards
int calculate_startdv(int startd)
{
int startdv;
do
{
startdv = startd % 10;
startd /= 10;
} while (startd > 10);
return startdv;
}
【问题讨论】:
-
您在“无效”但期望其他内容的地方输入了什么?
-
@mkrieger1 感谢您分享的链接!我正在使用来自贝宝的有效卡号示例;我的程序与它们一起工作(校验和和长度计算器),直到我尝试实际定义卡类型 ahh x
-
提示:将大整数除以 10 时,商小于 100 时为 2 位。小于 10 时为 1 位...用更少的变量重新编写“开始”函数。 ..
-
@Fe2O3 我不确定我是否理解如何用更少的变量重写它,我认为它们已经每个只需要一个变量输入?对不起,我是初学者!