有什么想法为什么会生成浮点异常?请忽略错误的编码。这是非常粗糙的,我只是尝试在此作业上尝试不同的事情。另外,我尝试仅使用在课堂上学到的操作来完成这项作业(我很惊讶还有其他一些方法可以使这更容易)
谢谢!
#include <stdio.h>
#include <cs50.h>
int main(void)
{ long c = get_long("What is your credit card number?\n");
long i = 10;
long j = 100;
long n = 0;
long m = 0;
long x = 2;
do
{ long a = (c % i - (c % i)/10)/(i/10);
n = a + n;
i = i*100;
}
while (c/i >= 0.1 || c/i == 0);
do
{ long b = (c%j - (c%j)/10)/(j/10);
m = b + m;
j = j*100;
}
while (c/j >= 0.1 || c/j == 0);
long sum = n + 2*m;
if (i > j)
{
x = i;
}
else
{
x = j;
}
if (sum % 10 == 0)
{ if((x == 10000000000000000) && ((c % (x/100) - c % (x/1000))/(x/100000) == (34)))
{
printf("Amercan Express\n");
}
else if((x == 100000000000000000) && ((c % (x/100) - c % (x/1000))/(x/100000) == (51)))
{
printf("MasterCard\n");
}
else if((x == 10000000000000) && ((c % (x/100) - c % (x/1000))/(x/100000) == 4))
{
printf("Visa\n");
}
else if((x == 10000000000000000) && ((c % (x/100) - c % (x/1000))/(x/100000) == 4))
{
printf("Visa\n");
}
else
{
printf("Invlid\n");
}
}
else
{
printf("Invlid\n");
}
}'''
答案 0 :(得分:0)
您尝试做N % 0
。
这是0除。
答案 1 :(得分:0)
这是问题所在的部分:
while(c / i> = 0.1 || c / i == 0);
在您的第一个while循环中。
您的数据类型很长,所以您说只要c / i大于0.1或== 0,然后继续。不幸的是,这将永远持续下去,因为long不能始终保持小数位,所以它总是> = 0.1或<=0。如果使用debug50 ./filename来调试debug50,则可以放置一个红点并逐步执行。您将看到,第一次做while循环将继续运行,从而增加每个周期的i值。最终,i的值长时间大于内存限制,因此代码会产生意外的结果。如果逐步执行,您会发现它最终为i分配了0,因此您将遭受除以0的错误。
您可以通过更改数据类型或更改while循环来解决此问题。
我希望能有所帮助。 ID建议在CS50 IDE中使用debug50逐步执行while循环,以查看发生了什么。