【问题标题】:After running code, the output is always zero运行代码后,输出始终为零
【发布时间】:2021-10-22 17:33:38
【问题描述】:

我不明白是什么使输出为零。

我想把 1000 作为x 和 100.00 作为y,我希望输出是8000.00 而不是00

#include<stdio.h>

int main()
{
    int x,i;
    double y, result= x;
    scanf("%d %lf",&x,&y);

    for(i=0; i<3; i++)
    {
        y/=100;
        result = result+(result*y);
    }

    printf("%.2lf\n",result);
    return 0;   
}

【问题讨论】:

  • result 被分配x 时,x 未初始化。然后将一些东西添加到result,因此它没有可预测的价值。因此,未定义的行为。
  • 您将result 初始化为x 给它一个未定义的值,因为此时x 本身是未定义的。将作业移到 scanf 之后
  • 那么解决方案是什么...
  • 在@TomKarzes 提到的更正之后,输出不是8000.00,而是2020.20。如果您删除小数位限制,则为2020.202000
  • 代码从上到下执行。 xscanf 上方的每一行都有一个垃圾值

标签: c


【解决方案1】:

你只是声明了变量x,而不是初始化它。所以它会导致未定义的行为。

int x,i; // &lt;-- you declare the variable, but you didn't assign a value to x

然后,您将result 分配给x

double y, result= x; // so now result is undefined behavior

现在才给x 赋值:scanf("%d %lf",&amp;x,&amp;y);,但为时已晚。 result 现在是未定义的行为。

你应该把你的代码改成这样:

#include<stdio.h>

int main()
{
    int x,i;
    double y;
    scanf("%d %lf",&x,&y); // <-- now you give x a value
    result= x; // <-- so now result is not undefined behavior anymore.


    for(i=0; i<3; i++)
    {
        y/=100;
        result = result+(result*y);
    }

    printf("%.2lf\n",result);
    return 0;   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多