以下程序正在打印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);
}
由于
答案 0 :(得分:2)
在第二次调用printf
时,您传递的是int
,但格式字符串为%lf
,需要传递浮点值。这会调用未定义的行为。
如果您希望将y
视为浮点值,并将其传递给printf
,则需要进行显式转换:
printf("%lf\n", (double)y);
答案 1 :(得分:1)
为了更准确地回答你的问题(尽管大卫的回答是完全准确的),当(在运行时)格式字符串被printf
函数解析时,它需要double
格式。但是,您提供了int
,因为int
很可能与double
的大小不同(但没有迹象表明情况确实如此),您的程序会读取一些垃圾内存和打印出这个意外的结果这是零来自的地方。