我在回顾过去的测验后,今天在C ++中测试了类型转换,并且不能为我的生活找出为什么我的' x'值在以下代码中从9更改为4.5000。
int main(){
int x = 9, y = 2;
float z;
z = (float)x/(float)y;
printf("\n%f", z);
printf("\n%f", x);
printf("\n%d", x);
}
输出
4.5000
4.5000
9
我很感激任何帮助!
答案 0 :(得分:8)
printf
函数希望float
位于堆栈上(因为%f
)并且您只提供了int
。
在这种情况下,您需要将x
投射到float
:
printf("\n%f", (float)x);
答案 1 :(得分:6)
在printf("\n%f", x)
int x
{/ 1}}中,您 <{em}} x
至float
- 您 假设< / em>它是一个浮动的。这就像给一名消防员递上一块黄油,并告诉他这是一个灭火器 - 不能正常工作。
要进行强制转换,您必须将值分配给强制转换兼容变量:
float floatX = x;
printf("\n%f", floatX);
或使用演员:
printf("\n%f", (float)x);
答案 2 :(得分:0)
它不会将你的X切成两半。看下面的代码,它仍然打印4.5
#include <stdio.h>
int main(){
int x = 9, y = 2;
float z;
z = (float)x/(float)y;
x = 15;
printf("\n%f", z);
printf("\n%f", x);
printf("\n%d", x);
}
打印:
4.500000
4.500000
15
可能必须在内部执行浮点数和整数存储在堆栈中的方式。它很可疑,因为它是第一个存储的浮点值。如果我将代码更改为:
#include <stdio.h>
using namespace std;
int main(){
int x = 11, y = 2;
float z;
z = (float)x/(float)y;
x = 15;
printf("\n%f", z);
printf("\n%f", x);
printf("\n%d", x);
}
输出
5.500000
5.500000
15
如果您不打印变量z
,则输出变为
0.000000
15
因此可能与打印顺序有关。