[英]Why Floating Point Exception(Linux)
在Linux上运行此程序时,出现浮点异常。
#include<stdio.h>
#include<math.h>
int main()
{
int num, num1, num2, n, i, j = 0, t, count = 0;
int root;
printf("Enter number of test cases\n");
scanf("%d", &t);
while (j < t)
{
scanf("%d", &num);
root = (int)sqrt(num);
for (i = 1; i < root; i++)
{
printf("Inside for");
if (num % i == 0)
num1 = i;
while (num1 > 0)
{
n = num1 % 10;
num1 = num1 / 10;
if (n == 3 || n == 5 || n == 6)
count++;
}
if (num % num1 == 0)
{
num2 = (int)num / num1;
while (num2 > 0)
{
n = num2 % 10;
num2 = num2 / 10;
if (n == 3 || n == 5 || n == 6)
count++;
}
}
}
j++;
count = 0;
printf("%d", count);
}
return 0;
}
谁能告诉我如何纠正它
while (num1 > 0)
{
n = num1 % 10;
num1 = num1 / 10;
if (n == 3 || n == 5 || n == 6)
count++;
}
if (num % num1 == 0)
滚动循环,除非num1变为0,然后除以零。 除以零可以保证SIGFPE(至少在x86和amd64上)。 尽管有名称,但它与浮点数无关。
在%操作之前打印num1的值,它得到0,然后除以0
使用调试器:
Starting program: /home/david/demo
Enter number of test cases
2
10
Program received signal SIGFPE, Arithmetic exception.
0x000000000040076d in main () at demo.c:26
26 if (num % num1 == 0)
(gdb) p num1
$1 = 0
(gdb)
如您所见, num1
的值是0除以0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.