为什么同一个程序在ideone和codeblocks中的行为不同?

时间:2017-02-02 17:28:18

标签: c

此代码旨在查找数字之和为100!我在ideone中得到了正确的输出,但在codeblocks中得到了错误的输出。请帮忙。

#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的正确输出?

1 个答案:

答案 0 :(得分:3)

您未在函数sum中初始化sum_of_digits。正常的局部变量不会自动在C中获得起始值,因此您的程序具有C标准所谓的未定义行为。任何事情都可能发生,但通常会发生的变化是变量从发生在变量碰巧所在的内存中的任何数据开始。