[英]How do I fix these errors? CS50 Pset1 Credit
有人可以帮我吗? 这是我的代码和我得到的检查错误。 不太明白问题出在哪里以及为什么会出现问题。
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main (void)
{
long long card;
do
{
card = get_long_long("Card Number: ");
}
while (card < 0);
long long int card1, card2, card3, card4, card5, card6, card7, card8;
card1 = ((card%100)/10)*2;
card2 = ((card%10000)/1000)*2;
card3 = ((card%1000000)/100000)*2;
card4 = ((card%100000000)/10000000)*2;
card5 = ((card%10000000000)/1000000000)*2;
card6 = ((card%1000000000000)/100000000000)*2;
card7 = ((card%100000000000000)/10000000000000)*2;
card8 = ((card%10000000000000000)/1000000000000000)*2;
card1 = (card1%100)/10 + (card1%10);
card2 = (card2%100)/10 + (card2%10);
card3 = (card3%100)/10 + (card3%10);
card4 = (card4%100)/10 + (card4%10);
card5 = (card5%100)/10 + (card5%10);
card6 = (card6%100)/10 + (card6%10);
card7 = (card7%100)/10 + (card7%10);
card8 = (card8%100)/10 + (card8%10);
long long int card9, card10, card11, card12, card13, card14, card15, card16;
card9 = (card%10);
card10 = (card%1000)/100;
card11 = (card%100000)/10000;
card12 = (card%10000000)/1000000;
card13 = (card%1000000000)/100000000;
card14 = (card%100000000000)/10000000000;
card15 = (card%10000000000000)/1000000000000;
card16 = (card%1000000000000000)/100000000000000;
long long int sum1, sum2, sum3;
sum1 = card1 + card2 + card3 + card4 + card5 + card6 + card7 + card8;
sum2 = card9 + card10 + card11 + card12 + card13 + card14 + card15 + card16;
sum3 = sum1 + sum2;
long long length = 0;
long long visa = card;
long long amex = card;
long long master = card;
if (sum3 % 10 != 0)
{
printf("%s\n", "INVALID CARD");
return 0;
}
while (card>0)
{
card = card/10;
length++;
}
//if VISA
while (visa >= 10)
{
visa /= 10;
}
if (visa == 4 && (length == 13 || length == 16))
{
printf("%s\n","VISA");
return 0;
}
//if AMEX
while (amex >= 100000000000000)
{
amex /= 100000000000000;
}
if ((amex == 34 || amex == 37) && (length == 15))
{
printf("%s\n","AMERICAN EXPRESS");
return 0;
}
//if MASTER
while (master >= 100000000000000)
{
master /= 100000000000000;
}
if ((master == 51 || master == 52 || master == 53 || master == 54 || master == 55) && (length == 16))
{
printf("%s\n","MASTERCARD");
return 0;
}
else
{
printf("INVALID CARD\n");
return 0;
}
}
:) credit.c exists
:) credit.c compiles
:( identifies 378282246310005 as AMEX
expected "AMEX\n", not "INVALID CARD\n..."
:( identifies 371449635398431 as AMEX
expected "AMEX\n", not "INVALID CARD\n..."
:) identifies 5555555555554444 as MASTERCARD
:) identifies 5105105105105100 as MASTERCARD
:) identifies 4111111111111111 as VISA
:) identifies 4012888888881881 as VISA
:) identifies 4222222222222 as VISA
:( identifies 1234567890 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
:( identifies 369421438430814 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
:( identifies 4062901840 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
:( identifies 5673598276138003 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
:( identifies 4111111111111113 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
:( identifies 4222222222223 as INVALID
expected "INVALID\n", not "INVALID CARD\n..."
我不会给你解决方案,因为这会违反本课程的原则。 有人建议您使用数组,这是一个很好的建议,但 CS50 下周将教您,以便您知道现在执行此操作的困难方法,因此请尝试在不查找这些内容的情况下解决此问题。
您应该始终密切注意代码检查器上的错误消息:
一旦你弄清楚那里出了什么问题,你就可以确定 AMEX 有什么问题,以及你是如何设置它来计算的。 尝试使用 debug50 运行本节并查看对例如“371449635398431”所做的操作(这将导致打印出 AMEX)。
检查您在该部分中的 printf 的方式。 这不符合检查员的规范。
关于风格的快速建议:你在硬编码。 您可以更动态地编写其中的一些内容,利用抽象和 for 循环,就像本周课程中介绍的那样。 这些将消除一遍又一遍地输入例如 1000000000000000 的需要,并帮助您避免犯错误和调试它们。 如果不好好学习他们现在给你的工具,接下来的几周将比必要的更难。
在这里,对于一个没有错误的示例,您可以使用 >= 和 <= 使这更容易阅读和编辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.