int main()
{
float a=4;
int b=2;
printf("%d\n",(a/b));
printf("%f",(a/b));
return 0;
}
第一个printf语句再次打印不同的值。我知道这是因为我使用%d说明符作为浮点类型数。但我不知道实际工作。 也, 当我改变第一行时:
int a=4;
然后第二个声明是打印
0.000000
一次又一次。那么为什么第一个printf在第一个代码中打印出不同的值,但在第二个代码的第二个语句中,它打印的是相同的值? 任何人都可以解释一下吗?
答案 0 :(得分:5)
将int
除以int
会产生int
。将float
除以int
会产生float
。
对于int
,请使用%d
。对于float
,请使用%f
。如果你混淆它们,你会得到垃圾。
答案 1 :(得分:3)
a/b
会为您提供float
(并提升为double
)值。使用%d
说明符打印它将调用未定义的行为。
那么为什么第一个代码中的第一个
printf
打印不同的值,但是在第二个代码的第二个语句中,它打印的是相同的值?有人能解释一下吗?
这是因为未定义的行为。在这种情况下,有时你可能得到你期望的结果,有时结果是我所期望的,有时候是编译器期望的结果。