2016-12-14 13 views
-2

私のプログラムは、私は、ランタイムERORを持っている数は完全数 あるかどうかを確認することです、それはc.programing、コードdosent仕事

余りを返し input % i
#include <stdio.h> 

int main(void) 
{ 
    int input=0; 
    int i=0; 
    int counter=0; 

    printf("enter a number \n"); 
    scanf("%d", &input); 
    for (i=0;i<=input;i++) 
    { 
     if (input%i==0) 
     { 
      counter = counter+i; 
     } 
    } 
    if (input==counter) 
    { 
     printf("%d in a perfect number\n", counter); 
    } 
    else 
    { 
     printf("%d is not a perfect number\n", input); 
    } 
    system("pause"); 
    return 0; 
} 
+3

デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf

+2

for for(i = 0; i <=input' --> for for(i = 1; i BLUEPIXY

答えて

5

を大事場合 を助け、私はメモ帳+ +を使用していてくださいinputiで割ったとき。しかし、0で数値を分割することはできません。そのため、input % 0は未定義の動作になります。

ループを0ではなく1から開始するように変更します。また、の前にinumberに達する前に停止する必要があります。なぜなら、数値は常にそれ自体の除数であるからですが、除数を加算するときに合計に含めてはいけません(どのように数値をすべての約数?)。あなたはinput%i == 0iを持って

for (i = 1; i < number; i++) 
1

0に初期化されています。これは、おそらくエラーが発生している最初の繰り返しで本質的に0で除算されています。