You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写斐波那契数列查询代码运行无输出问题排查求助

斐波那契代码问题排查与修复

核心错误点(直接导致无输出)

  • 变长数组声明时机错误:你在scanf给变量n赋值之前就声明了int seq[n],此时n是未初始化的垃圾值,数组长度非法,后续访问数组元素属于未定义行为,大概率触发程序崩溃导致无任何输出。
  • 打印判断逻辑错误:for循环的终止条件是i <= n,循环执行结束后i的值为n+1,后续判断if(i == n)永远为假,printf语句根本不会执行,这是无输出的最直接原因。

其他潜在问题

  • 未校验输入合法性:如果用户输入负数,会导致数组长度为负,直接触发程序异常
  • 内存利用冗余:仅查询单个位置的斐波那契值不需要存储整个数列,只需要保留前两项的值即可,完全可以省去数组的内存开销
  • 数值溢出风险:int类型取值范围有限,当n超过46时就会发生整数溢出,大n场景建议改用long类型存储数值

最小改动修复版代码(和原代码逻辑对齐)

#include <stdio.h>

int main(){
  int n;
  int i;

  printf("number of sequence for the fibonacci number that you want to find out (from 0)= ");
  scanf("%d", &n);
  // 输入合法性校验
  if(n < 0){
    printf("input n cannot be negative\n");
    return 1;
  }
  // 数组声明移到n赋值之后
  int seq[n+1];

  for(i = 0; i <= n; i++){
    if(i == 0){
      seq[i] = 0;
    }
    else if(i == 1){
      seq[i] = 1;
    }
    else{
      seq[i] = seq[i-1] + seq[i-2];
    }
  }
  // 去掉无效判断直接打印
  printf("the value in sequence %d is %d\n", n, seq[n]);

  return 0;
}

优化版代码(无需数组,性能更高)

#include <stdio.h>

int main(){
  int n;
  printf("number of sequence for the fibonacci number that you want to find out (from 0)= ");
  scanf("%d", &n);
  if(n < 0){
    printf("input n cannot be negative\n");
    return 1;
  }
  if(n == 0){
    printf("the value in sequence 0 is 0\n");
    return 0;
  }
  // 用long避免溢出
  long prev_prev = 0, prev = 1;
  for(int i = 2; i <= n; i++){
    long temp = prev;
    prev = prev_prev + prev;
    prev_prev = temp;
  }
  printf("the value in sequence %d is %ld\n", n, prev);
  return 0;
}

内容的提问来源于stack exchange,提问作者imnotarobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:15:03