当`if(变量%2 == 0)`时程序崩溃

我正在写一个找到完美数字的程序。 读完这些完美的数字之后,我遇到了一个列表: 完美数字列表 。 目前的输出是:

28 // perfect 496 // perfect 8128 // perfect 130816 // not perfect 2096128 // not perfect 33550336 // perfect 

我决定创建数组并使用数字,将数字全部除以(不包括其余数字)。 因此,通过添加数组的所有元素,我将能够validation它是否是一个完美的数字。 但应用程序崩溃,我无法理解为什么:

 #include  #include  int main() { unsigned long number; unsigned long arr2[100] = {0}; int k = 0; for ( number = 0; number <= 130816; number++ ) if ( 130816 % number == 0 ) arr2[k++] = number; for ( k = 0; k < 100; k++ ) printf("%lu", arr2[k]); return 0; } 

你在这里做模数zero

 if ( 130816 % number == 0 ) 

这是未定义的行为。 如果你在1开始你的for循环,它应该解决这个问题。 但是,由于所有N N % 1 == 0 ,您可能需要从2开始。

根据C99标准, 6.5.5 /5C11不变):

/运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数。 在这两个操作中,如果第二个操作数的值为零,则行为未定义。

当number = 0时,你除以零;

138816 % number涉及分割和余数。