-1

下面的程序正在打印 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);

    }

谢谢

4

2 回答 2

2

在对您的第二次调用printf中传递一个int,但格式字符串是%lf它期望传递一个浮点值。这会调用未定义的行为。

如果您想在将y其传递给 时将其视为浮点值,则printf需要显式转换:

printf("%lf\n", (double)y);
于 2013-07-19T09:33:51.600 回答
1

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

于 2015-08-10T20:31:42.093 回答