程序崩溃时`如果(变量%2 == 0)`(Program crashes when `if (var

2019-10-18 05:49发布

我正在写找到完美数的程序。 看了关于我碰到他们的名单出来,这些完美的数字 : 完美的数字列表 。 此刻的输出是:

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

我决定创建数组并把它与数字,这完全把数(不休息)。 因此,我将能够验证,如果它是一个完美的数字或不添加阵列中的所有元素。 但是,应用程序崩溃,我不明白为什么:

#include <stdio.h>
#include <stdlib.h>

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;
}

Answer 1:

你正在做的模量zero的位置:

if ( 130816 % number == 0 )

这是不确定的行为。 如果你在开始你的for循环1相反,它应该解决这个问题。 然而,由于N % 1 == 0所有N ,你可能需要在开始2

C99标准, 6.5.5 /5 (在不变C11 ):

的/操作符的结果是由第二所述第一操作数的除法的商; %运算符的结果是余数。 在两种操作中,如果第二个操作数的值为零,则行为是不确定的。



Answer 2:

你被零除当数= 0;

138816 % number涉及除法和余数。



文章来源: Program crashes when `if (variable % 2 == 0)`