简单C程序中奇怪的输出值

时间:2018-10-12 11:24:40

标签: c fibonacci

我正在尝试在我的C程序中计算斐波那契数列,但是当我尝试输出结果时,我得到了4个奇怪的数字序列,我不知道它们是什么意思。它们是内存地址还是什么?我在做什么错了?result

#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;
}

2 个答案:

答案 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;
  

未初始化变量中的值可以是任何值 –不可预测,并且每次运行程序时都可能不同读取未初始化变量的值是不确定的行为 –这始终是一个坏主意。必须先使用一个值对其进行初始化,然后才能使用它。