浮点exception

我成功编写了这段代码:

#include  #include  int q; int main() { srand( time(NULL) ); int n=3; q=ceil(sqrt(n)); printf("%d\n %d\n", n,q); if(n == 2) printf("%d\n is prime", n); else if(n % 2 == 0.0 || n < 2) printf("%d\n is not prime", n); else { int x; for(x = 0; x < q; x++){ if(n % x == 0) { printf("%d\n is not prime", n); return; } else printf("%d\n is prime", n); } } } 

但是当我运行我的代码时,我收到以下错误:

浮点exception

这个错误意味着什么,我该如何解决?

它是由n % x引起的,当x为0.你应该从x开始,而不是2。 你根本不应该使用浮点数,因为你只需要整数运算。

一般注意事项:

  1. 尝试更好地格式化代码。 专注于使用一致的风格。 例如,你有一个在if大括号(甚至不是空格)之后立即开始,而另一个在其间有一个换行符。
  2. 除非必要,否则不要使用全局变量。 q没有理由成为全球性的。
  3. 不在非void(int)函数中返回没有值。

http://en.wikipedia.org/wiki/Division_by_zero

http://en.wikipedia.org/wiki/Unix_signal#SIGFPE

这应该给你一个非常好的主意。 由于模数在其基本意义上是与余数的除法,因此something % 0被除以零,因此将触发SIGFPE被抛出。

它是由n % x引起的,其中在第一次循环迭代中x = 0 。 您无法计算相对于0的模数。