为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]

Posted

技术标签:

【中文标题】为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]【英文标题】:Why in my c program when I use double it only puts out 0, but when I instead use float it works? [duplicate]为什么在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制] 【发布时间】:2022-01-22 09:50:25 【问题描述】:

当我使用浮点数时,像这样:

#include <stdio.h>

int main()

    float g;
    float f;

    scanf("%f", &f);
    g = f / .5;
    printf("%f", g);
    return 0;

然后输入 2 我得到 4.000。当我使用double 代替float 时,结果始终为0.000。为什么我错过了什么?

【问题讨论】:

当我使用 double 代替 float 时,结果始终为 0.000。 ...因为您需要 scanf("%lf", &amp;f); 来获得 double 如果可能,请使用更好的编译器,或启用更多警告。现代编译器会准确地告诉你你在这里做错了什么。 @SteveSummit 您建议使用哪些 c 编译器?我才刚刚开始。 【参考方案1】:
#include <stdio.h>

int main()

    double g;
    double f;

    scanf("%lf", &f);
    g = f / .5;
    printf("%lf", g);
    return 0;

您需要在此处使用专门用于双精度的格式说明符 (%lf)。

有关不同格式说明符的更多信息,请参阅format string specifications。

【讨论】:

谢谢。我以为我试过了,但显然我搞砸了。【参考方案2】:

作为,Scanf not reading in double,

您对编译器撒谎:扫描时,%f 说您提供了指向 float 的指针。但是您提供了指向double 的指针。

要修复,请使用%lf 或将输入声明为float

请注意,printf 格式存在不对称性,%f 用于 floatdouble 参数。这是因为printf 参数被提升为double(并且不是指针)。

【讨论】:

以上是关于为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章