为什么输出与%f参数不同?

时间:2014-04-25 08:36:05

标签: c

int a=3.14*150;
printf("%d",a);
return 0;

这很好用,输出是471

int a=3.14*150;
printf("%f",a);
return 0;

但现在输出为-0.104279 我以为int会被提升为浮动 但输出完全不同 我正在使用gcc 4.7.2 ubuntu 12.10

3 个答案:

答案 0 :(得分:2)

使用printf的错误转换说明符是未定义的行为。 (对于scanf也是如此)。

现在,%f转换说明符意味着int变量a的位将被解释为浮点值。浮点值通常按IEEE Standard for Floating-Point Arithmetic (IEEE 754)实现,但标准并未强制要求。这就解释了为什么你的输出不是你所期望的。

答案 1 :(得分:1)

printf不会检查元素类型 - 它假设您是诚实的,并且您实际上正在传递您所说的您将要通过的内容。它的未定义行为打印类型与指定符不匹配。

答案 2 :(得分:0)

尺寸不同,因此这是未定义的行为。根据格式字符串中的信息,不能进行任何促销,而不是语言的工作方式。 printf()函数只是一个函数。

相关问题