2017-02-02 4 views
0

このコードは、100の桁の合計を見つけるように設計されています。私はideoneで正しい出力を得るが、コードブロックで間違った出力を得る。助けてください。同じプログラムが理想とコードブロックで異なる動作をするのはなぜですか?

#include <stdio.h> 
#include <stdlib.h> 
#define size_of_number 160 
#define question 100 

//Function Prototypes 
void initialise(int[]); 
int sum_of_digits(int[]); 
void factorial(int[],int); 

int main() 
{ 
    int number[size_of_number]; 
    int sum; 

    initialise(number); 

    factorial(number, question); 
    //Getting the sum of the digits of the number 
    sum = sum_of_digits(number); 
    printf("The sum of the digits of %d! is %d.\n",question, sum); 

    return 0; 
} 

//Initially, the number is 0 so all it's digits are set to zero. 
void initialise(int number[]) 
{ 
    int i; 
    for(i = 0; i < size_of_number; i++) 
    { 
     number[i] = 0; 
    } 
} 

//Finding the factorial by multiplying the digits 
void factorial(int number[], int num) 
{ 
    int i, first_digit; 
    int carry, replace, product; 

    first_digit = 0; 
    number[first_digit] = 1; 

    while(num != 1) 
    { 
     carry = 0; 
     for(i = 0; i <= first_digit; i++) 
     { 
      product = num*number[i] + carry; 
      replace = product%10; 
      carry = product/10; 
      number[i] = replace; 

      if((i == first_digit) && (carry > 0)) 
      { 
       first_digit++; 
      } 
     } 

     num--; 
    } 
} 

//Finding the sum of all digits 
int sum_of_digits(int number[]) 
{ 
    int i, sum; 

    for(i = 0; i < size_of_number; i++) 
    { 
     sum = sum + number[i]; 
    } 
    return sum; 
} 

他のプログラムにも問題がありました。 Codeblocksが648という正しい出力を与えないのはなぜですか?

+3

TL; DR。定義されていない、または実装定義の振る舞いを含んでいると、動作が異なることがあります。 –

答えて

3

sumを初期化していません。通常のローカル変数は自動的にCで開始値を取得しないので、プログラムはCの標準が未定義の動作を呼び出します。何かが起きる可能性がありますが、一般的に起こるのは、変数が見つかったメモリ内の場所にあるデータが何であっても変数が始まるということです。

+1

初期化されていないローカル変数は、Javaでデフォルト値を取得しません。コンパイルエラーが発生します。 Upvoteの効果は同じですが、あなたはまだ文言を修正する必要があります。 –

+0

@MadPhysicist:ありがとう、ありがとう。 –

+0

私はまだ答えを受け入れることができません。アプリは9分待つように言っています。助けてくれてありがとう !ところで、あなたはプログラムを読んで、間違いをすばやく理解しました! – user230452

関連する問題