我正在尝试在我的C程序中计算斐波那契数列,但是当我尝试输出结果时,我得到了4个奇怪的数字序列,我不知道它们是什么意思。它们是内存地址还是什么?我在做什么错了?
#include <stdio.h>
void fibonacci(int N) {
if(N == 0) {
printf("0\n");
} else if(N == 1) {
printf("0\n1\n");
} else { // calculate the fibonacci number
int temp;
int i;
for (i = 0; i <= N; i++) {
temp += i;
printf("%d \n",temp);
}
}
return;
}
int main() {
int n;
do {
printf("Please insert a Natural Number: \n");
scanf("%d",&n);
} while (n < 0);
fibonacci(n);
return 0;
}
答案 0 :(得分:2)
您无法初始化temp
变量:您需要
int temp = 0;
原因是automatic variables in C
have undefined values when they are declared。自动变量(在函数内部声明的变量通常是这种类型的)会在内存中分配存储空间,但是该存储空间以前可能已经用于其他用途,在这种情况下,最后存储在那里的任何值都会“出现”在您的变量中。无法知道此值将是什么。在声明变量时总是养成初始化变量的习惯。
答案 1 :(得分:0)
您的Fibonacci
函数中有一个未初始化的变量
int temp;
未初始化变量的访问为undefined behaviour。
可以创建没有值的变量。这是非常危险的,但是在某些情况下可以提高效率。 要创建没有初始值的变量,只需不包含初始值:
// This creates an uninitialized int
int i;
未初始化变量中的值可以是任何值 –不可预测,并且每次运行程序时都可能不同。 读取未初始化变量的值是不确定的行为 –这始终是一个坏主意。必须先使用一个值对其进行初始化,然后才能使用它。