为什么我得到’浮点exception:8′

我正在尝试计算0到100之间的所有素数,并且我得到一个浮点exception,有人可以告诉我为什么吗? (如果它有助于我使用gcc)

#include  int main(void) { int nums[100], i; for(i=0;i<100;i++) nums[i] = i; int j,k,l,z; for(i=1;i<100;i++) for(j=2;j<100;j++) if((nums[i] % nums[j]) == 0) { nums[j] = 0; } for(i=0;i<100;i++) if(nums[i] != 0) break; for(z=0;z<100;z++) { for(k=i;k<100;k++) for(l = (k+2);l < 100;l++) if((nums[k] % nums[l]) == 0) nums[k] = 0; } for(i=0;i<100;i++) if(nums[i] != 0) printf("%d,",nums[i]); printf("\n"); return 0; } 

好吧,很难理解你的代码在做什么。 但是仍然

 for(i=1;i<100;i++) for(j=2;j<100;j++) if((nums[i] % nums[j]) == 0) { nums[j] = 0; } 

在此之后,许多nums值将为0 (您可以打印并检查)

所以,以后你做的时候

 for(z=0;z<100;z++) { for(k=i;k<100;k++) for(l = (k+2);l < 100;l++) if((nums[k] % nums[l]) == 0) //Part where division by 0 occurs nums[k] = 0; } 

将除以0 ,这将给出floating point exception

编辑

事实上,前两个for循环中只会出现floating point exception 。当i=2j=2nums[2]将更新为值0 。 然后,当i=4j=2 。 将division by 0 ,因为num[2]已经为0 ,从而导致floating point exception