C 用户输入前2个数字的斐波那契序列
我正在写一个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]);
#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]);