【问题标题】:Unexpected random numbers意外的随机数
【发布时间】:2017-01-19 01:36:24
【问题描述】:

我正在研究一个简单的函数,给定输入 n,返回 n 个斐波那契数。

int main(){
    int n = 0;
    int counter = 1;
    int f1, f2, f3 = 1;
    printf("Insert an integer bigger than 0:\n");
    scanf("%i", &n);
    printf("%i", f1);
    while(counter <= n){
            f3 = f1 + f2;
            printf("%i\n", f3);
            f1 = f2;
            f2 = f3;
            counter = counter + 1;
    }
    return 0; 
 }

令人惊讶的是,每次我运行程序时,该函数都会返回不同的结果。此外,这些数字远大于/小于任何可能的结果。

很可能,我遗漏了一些明显的东西,但我无法解释这种行为。

【问题讨论】:

  • printf("%i", f1);你认为f1在那个阶段的价值应该是多少?
  • int f1,f2,f3=1 ====> f1 和 f2 初始化了吗?
  • 不应该是1吗?
  • @Worice 也许它应该是,但它不是。如果 C 是这样工作的,可以说 C 会是一种稍微容易一些的语言,但你必须处理它实际存在的语言。无论如何,您总是可以简单地在一行中声明它们未初始化,然后在下一行中写上f1 = f2 = f3 = 1;
  • @JohnColeman 你是对的,我会记住的。我不认为随机数可能是未分配变量的结果。

标签: c loops


【解决方案1】:

这一行:

int f1, f2, f3 = 1;

只将f3初始化为1,不初始化f1f2。 你应该改用这个:

int f1 = 1, f2 = 1, f3 = 1;

初始化所有三个。

【讨论】:

  • 我只是稍微怀疑随机数可能是无符号变量的结果,但我否定了这个想法。很天真。谢谢。
  • 或者使用不同的语句来声明不同的变量。这也避免了int * a, b;problem
  • 对,单独声明每个变量总是更清楚。 int f1 = 1; int f2 = 1; int f3 = 1;
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 2015-03-04
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2019-04-19
  • 2023-02-04
  • 2020-11-19
相关资源
最近更新 更多