簡體   English   中英

當if(可變%2 == 0)時程序崩潰

[英]Program crashes when `if (variable % 2 == 0)`

我正在寫一個尋找完美數字的程序。 閱讀這些理想數字后,我發現了其中的一個列表: 理想數字列表 目前的輸出是:

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

您在這里將模數設為zero

if ( 130816 % number == 0 )

這是未定義的行為。 如果您從1開始for循環,則應該可以解決該問題。 但是,由於所有N N % 1 == 0 ,您可能需要從2開始。

根據C99標准6.5.5 /5 (在C11更改):

/運算符的結果是第一個操作數除以第二個的商。 %運算符的結果是余數。 在這兩個操作中,如果第二個操作數的值為零,則行為是不確定的。

當number = 0時,您被零除;

138816 % number涉及除法和余數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM