带有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.
n
未初始化。它包含一个垃圾值。
- 不要使用
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];
}
所以我是初学者,正在尝试解决一个关于制作 斐波那契数 的小项目。 该代码本质上是关于键入 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.
n
未初始化。它包含一个垃圾值。- 不要使用
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];
}