如何解决cs50 信用卡公司的信用问题
我对编程完全陌生,本周一直在研究 pset1,但事实证明信用有点困难。我已经设法让校验和正常工作,但我很难确定卡属于哪家公司,代码的最后一部分似乎每次尝试修复它时都会引入更多错误。如果有人能指出我正确的方向,我将不胜感激。
#include <cs50.h>
#include <stdio.h>
int main (void)
{
long long ccnumber;
do
{
ccnumber = get_long_long("Credit card number: ");
}
while (ccnumber < 0);
long long cc = ccnumber;
int s1;
while (cc > 0)
{
int l1 = cc % 10;
s1 = s1 + l1;
cc = cc / 100;
}
cc = ccnumber / 10;
int s2;
while (cc > 0)
{
int l1 = cc % 10;
l1 = l1 * 2;
if (l1 > 9) l1 = l1 % 10 + l1 / 10;
s2 = s2 + l1;
cc = cc / 100;
}
int s3 = s1 + s2;
if (s3 % 10 == 0)
s3 = true;
long long n = ccnumber;
int count = 0;
while (n != 0)
{
n /= 10;
++count;
}
int twonumbers = ccnumber;
while(twonumbers >= 100)
{
twonumbers = twonumbers / 10;
}
int firstnumber = ccnumber;
while(firstnumber >= 10)
{
firstnumber = firstnumber / 10;
}
if (twonumbers == 34 || 37 && (count == 15 ))
printf("AMERICAN EXPRESS\n");
else if (twonumbers == 51 || 52 || 53 || 54 | 55 && (count == 16 ))
printf("MASTER CARD\n");
else if (firstnumber == 4 && (count == 13 || 16 ))
printf("VISA\n");
else
printf("INVALID\n");
}
解决方法
如果语句不正确,您的结尾:
if (twonumbers == 34 || 37 && (count == 15 ))
...
应该
if ((twonumbers == 34 || twonumbers == 37) && (count == 15 ))
对于每个 if 语句都一样 - 您必须重复每个 or 语句的比较内容,否则编译器将假定为“真”,因为在这种情况下,37 不等于 0。
不是,您也可以比较范围:
else if (twonumbers >= 51 && twonumbers <= 55 && count == 16)
注意我还在最后一次比较时更正了一个二进制或那里(你只有 1 | 而不是 2 ||)
最后一个
else if (firstnumber == 4 && (count == 13 || count == 16 ))
我也有疑问:
int s3 = s1 + s2;
if (s3 % 10 == 0)
s3 = true;
正在这样做,因为这在 C 意义上实际上总是“真实”,但实际上,您实际上并没有在任何地方使用 s3
所以我很困惑。
最后,打开所有编译器警告。它会告诉你我在这里提到的很多事情。
现在,我并不是说这是这里唯一的错误,但这是最明显的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。