为啥在我的 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 时它可以工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?

为啥我会从“double”转换为“float”,可能会丢失数据警告?(c)

当我尝试从单链表中删除节点时,为啥我的 C 程序会崩溃

当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405

为啥 stdlib 中的 qsort 不适用于双精度值? [C]

为啥当我滚动到顶部然后在我的 API 应用程序上返回但在网页上正常运行时,我的页面顶部按钮口吃/滞后/粘住?