用于交叉格式说明符的printf输出

时间:2013-07-19 09:32:35

标签: c printf

以下程序正在打印123828749,0.000000但我预计123828749,123828749.0。从哪里得到0.000000?

    #include <stdio.h>

    void main()

    {

        double x = 123828749.66;

        int y = x;

        printf("%d\n", y);

        printf("%lf\n", y);

    }

由于

2 个答案:

答案 0 :(得分:2)

在第二次调用printf时,您传递的是int,但格式字符串为%lf,需要传递浮点值。这会调用未定义的行为。

如果您希望将y视为浮点值,并将其传递给printf,则需要进行显式转换:

printf("%lf\n", (double)y);

答案 1 :(得分:1)

为了更准确地回答你的问题(尽管大卫的回答是完全准确的),当(在运行时)格式字符串被printf函数解析时,它需要double格式。但是,您提供了int,因为int很可能与double的大小不同(但没有迹象表明情况确实如此),您的程序会读取一些垃圾内存和打印出这个意外的结果这是零来自的地方。