-3
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 打印不同的值,但在第二个代码的第二个语句中,它打印相同的值?谁能解释我?

4

2 回答 2

5

除以int产生int一个int。除以得出a floatintfloat

对于int,使用%d。对于float,使用%f。如果你把它们混在一起,你就会变成垃圾。

于 2013-10-13T12:33:57.357 回答
3

a/b会给你一个float(并被提升到double)价值。使用说明符打印它%d会调用未定义的行为。

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

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

于 2013-10-13T12:33:45.683 回答