1
#include<stdio.h>
#include<math.h> 
int main()
{
   float i = 2.5;
   printf("%d\n%d\n%d",i,i,i);
}

当我使用 gcc 编译并运行它时,我得到它作为输出:

0
1074003968
0

为什么它不打印

2
2
2
4

4 回答 4

12

您将 a float(将转换为 a double)传递给printf,但告诉printf期望 a int。结果是未定义的行为,因此至少在理论上,任何事情都可能发生。

通常会发生的是从堆栈中printf检索sizeof(int)字节,并将它们保存的任何位模式解释为int,并打印出碰巧表示的任何值。

您几乎可以肯定想要的是在将其传递floatint之前将其转换为printf.

于 2012-04-25T20:46:11.517 回答
2

格式说明"%d"符用于十进制整数。改为使用"%f"

并花点时间阅读printf()手册页

于 2012-04-25T20:44:37.090 回答
1

“%d”是十进制整数(通常是 32 位整数)的说明符,而“%f”说明符用于十进制浮点。(通常是双精度或浮点数)。

如果您只想要浮点数的非小数部分,您可以将精度指定为 0。

IE

float i = 2.5;
printf("%.0f\n%.0f\n%.0f",i,i,i);  

请注意,您还可以将每个值强制转换为 int,它会给出相同的结果。

printf("%d\n%d\n%d",int(i),int(i),int(i));
于 2012-04-25T20:57:18.360 回答
0

%d打印十进制(int)s,而不是(float)s。 printf()无法判断您是否将 a 传递(float)给它(C 没有本机对象;您不能询问值它是什么类型);您需要为您传递的类型使用适当的格式字符。

于 2012-04-25T20:45:48.403 回答