【发布时间】:2021-10-26 01:41:02
【问题描述】:
这段代码给了我斐波那契数
#include <stdio.h>
int main()
{
int n; //integer overflow error for n > 47
printf("How many Fibonacci numbers?\n");
scanf("%d", &n);
int fibs[n];
fibs[0] = 0;
fibs[1] = 1;
printf("%d ", fibs[0]);
printf("%d ", fibs[1]);
for(int i = 2; i < n; i++)
{
fibs[i] = fibs[i - 2] + fibs[i - 1];
printf("%d ", fibs[i]);
}
return 0;
//gives 0 1 1 2 3 5 8 13 21 34 for n = 10
}
但这给了我错误的输出,但没有错误
#include <stdio.h>
int main()
{
int n, fibs[n];//change
printf("How many Fibonacci numbers?\n");
scanf("%d", &n);
fibs[0] = 0;
fibs[1] = 1;
printf("%d ", fibs[0]);
printf("%d ", fibs[1]);
for(int i = 2; i < n; i++)
{
fibs[i] = fibs[i - 2] + fibs[i - 1];
printf("%d ", fibs[i]);
}
return 0;
//gives 0 1 for n = 10
}
我知道它肯定与数组有关,而且它的大小没有被定义,但我无法理解到底是什么问题。
有人能解释一下这里发生了什么吗?
【问题讨论】:
-
请给出准确的输入、预期结果和实际结果。另外,您能否指出两个代码示例之间的区别(除了额外的注释)?
-
两者的代码一样吗? (虽然你真的需要在使用
n之前检查scanf()是否成功。 -
除了注释不同之外,您的两个程序完全相同。为了改进问题,您应该只包含不工作的版本,并显示您提供给程序的确切输入,这会导致意外行为;并描述行为与您的预期有何不同
-
你真的不需要保留所有斐波那契数的数组。在任何时候你都没有真正使用超过 3 个整数。
-
int n, fibs[n];在您尝试创建一个大小为未初始化变量的数组时会导致未定义的行为。你真的期望会发生什么?