下面的程序正在打印 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);
}
谢谢
在对您的第二次调用printf中传递一个int,但格式字符串是%lf它期望传递一个浮点值。这会调用未定义的行为。
如果您想在将y其传递给 时将其视为浮点值,则printf需要显式转换:
printf("%lf\n", (double)y);
为了更准确地回答您的问题(即使大卫的回答是完全准确的),当(在运行时)格式字符串被printf函数解析时,它需要double格式。但是,您提供的intand sinceint很可能与double您的程序读取一些垃圾内存并打印出这个意外结果的大小不同(但没有迹象表明是这种情况)。这就是零的来源。