带有for循环和if语句错误的斐波那契数代码

Fibonacci number code with for-loop and if statement error

所以我是初学者,正在尝试解决一个关于制作 斐波那契数 的小项目。 该代码本质上是关于键入 n(序列),它将向您显示该 n 序列中斐波那契数的值。 但当然代码出错了,代码只是停止,直到我输入 n-sequence,之后没有任何打印。有人可以检查我的代码吗?

#include <stdio.h>

int main(){
  int n;
  int seq[n];
  int i;

  printf("number of sequence for the fibonacci number that you want to find out (from 0)= ");
  scanf("%d", &n);

  for(i = 0; i <= n; i++){
    if(i == 0){
      seq[i] = 0;
    }
    else if(i == 1){
      seq[i] = 1;
    }
    else if(i > 1){
    seq[i] = seq[i-1] + seq[i-2];
    }
  }
  if(i == n){
    printf("the value in sequence %d is %d", n, seq[n]);
  }

return 0;
}

输入大小后,需要声明变长数组seq

例如

  int n;
  int i;

  printf("number of sequence for the fibonacci number that you want to find out (from 0)= ");
  scanf("%d", &n);

  int seq[n + 1];

数组的大小指定为n+1,因为要求用户输入从0开始的斐波那契数。

如果数组有 n + 1 个元素,这个 for 循环也是正确的。

  for(i = 0; i <= n; i++){

最好这样写

  for(i = 0; i < n + 1; i++){

还有这个 if 语句

  if(i == n){

没有意义。只输出数组元素seq[n].

的值

显然,在循环中,您将边界设置为 i<=n,而数组 seq[n] 的大小为 n。所以 i 必须小于 n.

  1. n 未初始化。它包含一个垃圾值。
  2. 不要使用 scanf() 来读取用户输入。这是非常容易出错的。只需尝试输入一些字符串,看看会发生什么。最好结合使用 fgets()sscanf().
int n;
char input[255];

printf("Number of sequence: ");
fgets(input, sizeof input, stdin);
input[strcspn(input, "\n")] = '[=10=]';

if (sscanf(input, "%d", &n) != 1) {
    // Handle input error
}

int seq[n+1]; // Edited: n+1 because fib starts from 0 
int i;
for (i = 0; i < n+1; i++) {
    if (i == 0 || i == 1)
        seq[i] = i;
    else
        seq[i] = seq[i-1] + seq[i-2];
}