C - 数组和函数不断返回零

时间:2013-11-19 02:58:16

标签: c arrays

我正在尝试编写一个程序,让用户可以生成1-75个Fibonacci数字,打印它们,然后将所有这些值一起添加到所有总和中。我没有问题生成数字和打印它们,但由于某种原因,我有一个很多和sum函数更麻烦。出于某种原因,它只返回0 ......并且在我盯着它看了几个小时后,我感到很茫然。任何和所有的帮助将不胜感激。我的代码如下:

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

//function to calculate fibonacci number 1-75 (user specified)
int fibonacci(int * array, int size)
{
    int i;
    unsigned long long int Fibonacci[size]; //generating the array to save the Fibonacci values

    Fibonacci[0] = 0; //by definition
    Fibonacci[1] = 1; //by definition

    for (i = 2; i < size; i++) {
        Fibonacci[i] = Fibonacci[i-2] + Fibonacci[i-1]; //equation to calculate the numbers
    }

    for (i = 0; i < size; i++) {
        printf("%llu\t", Fibonacci[i]); //printing out the numbers
    }

    printf("\n");
    return size;
}

int fibonacciSum(int * array, int size)
{
    int i;
    int sum = 0;

    for (i = 0; i < size; i++) {
        sum += array[i];
    }

    return sum;
}

int main(void)
{
    int size;

    printf("How many Fibonacci numbers do you want to generate (between 1 and 75)?\n");
    scanf("%i", &size);

    int * FibonacciNumbers = (int*) calloc(size,sizeof(int));

    if (size < 1 || size > 75) {
        printf("Bad number!");
        return 1;
    }

    fibonacci(FibonacciNumbers, size);
    printf("The sum of the Fibonacci numbers is: %d\n", fibonacciSum(FibonacciNumbers, size));

    return 0;

}

3 个答案:

答案 0 :(得分:6)

如果您将函数fibonacci重写为

int fibonacci(int * array, int size)
{
    int i;

    array[0] = 0; 
    array[1] = 1; 

    for (i = 2; i < size; i++) {
        array[i] = array[i-2] + array[i-1]; //equation to calculate the numbers
    }

    for (i = 0; i < size; i++) {
        printf("%d\t", array[i]); //printing out the numbers
    }

    printf("\n");
    return size;
}

因为Fibonacci数组上的作业不会影响存储在main中的array并在其他函数中使用。

答案 1 :(得分:2)

Fibbonacci数组只能在函数中访问。您需要将数字存储在另一个数组中。

答案 2 :(得分:0)

忘了分配?只是不确定为什么第一个返回任何东西。

size = fibonacci(FibonacciNumbers, size);

你在函数中混合了参数名称。