Странные выходные значения в простой программе c - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь вычислить ряд Фибоначчи в моей программе на 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 голосов
/ 12 октября 2018

Вы не можете инициализировать переменную temp: вам нужно

int temp = 0;

Причина в том, что автоматические переменные в C имеют неопределенные значения, когда они объявлены .Автоматическим переменным (переменные, объявленные внутри функций, как правило, относятся к этому типу) выделяется пространство памяти в памяти, но это пространство памяти вполне могло быть использовано для чего-то другого ранее, и в этом случае любое значение, которое было сохранено в последний раз, там «появится» в вашей переменной,Нет никакого способа узнать, какой будет эта ценность.Возьмите за правило всегда инициализировать переменные при их объявлении.

0 голосов
/ 12 октября 2018

В вашей функции Fibonacci есть неинициализированная переменная

int temp;

Доступ к неинициализированной переменной неопределенное поведение .

Можно создать переменную без значения.Это очень опасно, но в определенных ситуациях может повысить эффективность.Чтобы создать переменную без начального значения, просто не включайте начальное значение:

// This creates an uninitialized int
int i;

Значение в неинициализированной переменной может быть любым - этонепредсказуемо, и может отличаться при каждом запуске программы . Чтение значения неинициализированной переменной - неопределенное поведение - что всегда плохая идея.Он должен быть инициализирован значением, прежде чем вы сможете его использовать.

...