printf中的C语言计算

Sle*_*ear 2 c c++ printf operator-keyword

#include <stdio.h>

int main(){
int x;
x = (10+20)*(1.0/2);
printf("%d", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

15
Run Code Online (Sandbox Code Playgroud)

并以另一种形式:

#include <stdio.h>

int main(){
printf("%d", (10+20)*(1.0/2));
}
Run Code Online (Sandbox Code Playgroud)

输出是

0
Run Code Online (Sandbox Code Playgroud)

1.0/20.5当计算整型变量x,但1.0/2就是0计算时printf使用%d(我想...)

我无法理解这种情况......

另外,当我改变%d%f在所述第二代码,所述输出是15.000000

我在Windows 8中使用DEV C++.

San*_*ker 8

类型(10+20)*(1.0/2)double,但"%d"期望一个int.

所以,你需要强制转换为int:

printf("%d", (int) ((10+20)*(1.0/2)));
Run Code Online (Sandbox Code Playgroud)

它适用于"%f"因为期望a double.