【问题标题】:Fibonacci Sequence with user inputting first 2 numbers用户输入前 2 个数字的斐波那契数列
【发布时间】:2018-04-02 00:27:35
【问题描述】:

我正在编写一个 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;    
}

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

【问题讨论】:

  • 现在好点了吗?我不明白你删除逗号的意思,我从用户那里得到了 2 个输入。
  • 检查scanf的返回值。如果它不是 2,那么它没有读取两个数字,并且它没有读取的那些是未定义的(并且可以是任何东西)。您的scanf 格式为%d, %d,这意味着它需要在两个数字之间使用逗号。如果提示时不输入逗号,则不会解析第二个数字。

标签: c arrays fibonacci


【解决方案1】:

当你退出循环时i等于MAX_SIZE

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

您正在打印一个超出数组边界的值 (input[MAX_SIZE])。

【讨论】:

  • input[size] 不仅未初始化,而且未分配 -input0 变为 size-1
  • @Steve,哎呀,这个问题是在这个答案之后编辑的,但你是对的
【解决方案2】:

这是因为您的代码中的结果大于int 可以处理的最大值

Live example here!

来自Wikipedia

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

这就是问题所在

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

【讨论】:

    【解决方案3】:

    将 print 语句放在 for 循环大括号内。

    or (i = 2; i < MAX_SIZE; i++)
        {
        input[i] = input[i-2] + input[i-1];
        printf("%d\n", input[i]);
        }
    

    【讨论】:

    • 好的,所以我在循环中添加了打印语句,我得到的输出如下:1280719746 1416505600 -1597741950 -181236350
    • 并删除 scanf 中 %d,%d 之间的逗号,使其成为 scanf("%d%d" , &input[0], &input[1]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2020-01-18
    • 2022-11-28
    • 2016-01-21
    相关资源
    最近更新 更多