C 用户输入前2个数字的斐波那契序列

C 用户输入前2个数字的斐波那契序列,c,arrays,fibonacci,C,Arrays,Fibonacci,我正在写一个C程序来获取斐波那契数,用户需要输入前2个数,然后序列从那里开始。这是我的密码: #include <stdio.h> #define MAX_SIZE 100 int main() { int i, input[MAX_SIZE]; printf("please Enter first 2 digit of the Sequence\n"); scanf("%d, %d" , &input[0], &input[1]);

我正在写一个C程序来获取斐波那契数,用户需要输入前2个数,然后序列从那里开始。这是我的密码:

#include <stdio.h>
#define MAX_SIZE 100

int main()
{
    int i, input[MAX_SIZE];

    printf("please Enter first 2 digit of the Sequence\n");

    scanf("%d, %d" , &input[0], &input[1]);

    for (i = 2; i < MAX_SIZE; i++)
    {
        input[i] = input[i-2] + input[i-1];

     printf("%d\n", input[i]);
    }

    return 0;    
}
#包括
#定义最大尺寸100
int main()
{
int i,输入[MAX_SIZE];
printf(“请输入序列的前两位数字\n”);
scanf(“%d,%d”、&input[0]、&input[1]);
对于(i=2;i

但是,当我使用输入2和3运行代码时,我会得到这样的输出
14991141456
,这显然不是顺序。请帮助。

当您退出循环时,
i
等于
MAX\u SIZE

printf("%d\n", input[i]);

您正在打印超出数组边界的值(
input[MAX\u SIZE]
)。

将print语句放入循环大括号内

or (i = 2; i < MAX_SIZE; i++)
    {
    input[i] = input[i-2] + input[i-1];
    printf("%d\n", input[i]);
    }
or(i=2;i
这是因为代码中的结果大于
int
所能处理的最大值

数字2147483647(或十六进制7FFF,FFFF16)是最大值 计算中32位有符号二进制整数的正值。它是 因此,声明为整数的变量的最大值(例如。, 作为许多编程语言中的
int
),以及可能的最高分数, 很多电子游戏的钱等

这就是问题所在

[...]
433494437 + 701408733 = 1134903170
701408733 + 1134903170 = 1836311903
1134903170 + 1836311903 = -1323752223

input[size]
不仅仅是未初始化的,它是未分配的-
input
0
变为
size-1
@Steve,哎呀,这个问题是在这个答案之后编辑的,但是你是对的,现在好点了吗?通过删除逗号,我无法理解您的意思,我从用户那里得到了2个输入。请检查
scanf
中的返回值。如果它不是2,那么它没有读取两个数字,并且它没有读取的数字是未定义的(可以是任何数字)。您的
scanf
格式为
%d,%d
,这意味着两个数字之间需要逗号。如果在提示时不输入逗号,它将不会解析第二个数字。好的,因此我在循环中添加了print语句,得到如下输出:1280719746 1416505600-1597741950-181236350并删除scanf中%d,%d之间的逗号,使其成为scanf(“%d%d”、&input[0]、&input[1]);