这段代码实际上是如何工作的?

时间:2013-10-13 12:31:42

标签: c

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在第一个代码中打印出不同的值,但在第二个代码的第二个语句中,它打印的是相同的值? 任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:5)

int除以int会产生int。将float除以int会产生float

对于int,请使用%d。对于float,请使用%f。如果你混淆它们,你会得到垃圾。

答案 1 :(得分:3)

a/b会为您提供float(并提升为double)值。使用%d说明符打印它将调用未定义的行为。

  

那么为什么第一个代码中的第一个printf打印不同的值,但是在第二个代码的第二个语句中,它打印的是相同的值?有人能解释一下吗?

这是因为未定义的行为。在这种情况下,有时你可能得到你期望的结果,有时结果是我所期望的,有时候是编译器期望的结果。