为什么这个输出斐波那契数列的C++程序使用std::cout无任何输出?
程序无输出的核心原因
- 最直接的问题是合法范围判断逻辑写反:代码中
if(1<=n&&n<=1000) { return 0; }的作用是当输入n落在1~1000的合法区间时,直接终止程序返回0。你输入的6符合该判断条件,程序直接退出,完全没有执行后续的斐波那契数列计算和输出逻辑。
代码存在的其他问题
- 不符合标准C语法:
int arr[n];属于C语言的变长数组特性,不是标准C的支持内容,仅部分编译器通过扩展兼容该写法,正规场景下建议替换为std::vector<int> arr(n);实现动态长度的数组功能。 - 数组越界风险:当输入n=1时,代码中
arr[1] = 1会访问数组下标为1的位置,超出长度为1的数组的合法访问范围,触发未定义行为。 - 输出逻辑冗余错误:后续代码先通过循环打印了
arr[0]到arr[n-1]的所有元素,又额外单独输出一次arr[n-1],逻辑修正后运行会重复打印数列的最后一位。
修正后的参考代码
#include <iostream> #include <vector> using namespace std; int main(){ int n; cin >> n; // 合法范围校验,不符合要求才退出 if(n < 1 || n > 1000) { return 0; } vector<int> arr(n); arr[0] = 1; if(n >= 2) { arr[1] = 1; } for(int i = 2; i < n; i++) { arr[i] = arr[i-1] + arr[i-2]; } for(int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; return 0; }
内容的提问来源于stack exchange,提问作者Vedant Joshi
相关产品推荐
相关产品推荐

