使用:
float return1(void);
int main()
{
int x;
x = (float)return1();
printf("%f",x);
return 0;
}
float return1()
{
return 1;
}`
为什么输出-0.000000
?
不应该x
隐式转换为float
并打印1.000000
吗?
答案 0 :(得分:3)
不应该将x隐式地转换为浮点数并打印1.000000?
不,它不应该因为编译器可能不知道printf
做什么或将使用哪种格式来打印x
。
x
的类型为int
,因此应使用%d
代替%f
进行打印。
答案 1 :(得分:2)
为什么输出-0.000000?
因为
printf("%f",x);
和x是int,如果你想要1.00:,那么
printf("%f", (double) x);
或更好地将其更改为:
printf("%i", x);
答案 2 :(得分:2)
printf
不会根据格式字符串(当前%f
)中给出的标记来转换和解释对象。
取决于你想要什么
printf("%d", x);
或
printf("%f", (float)x);
或在C ++中:
std::cout << x; // or float(x)
答案 3 :(得分:1)
无需将return1()
投射到float
;您的x
是整数,并且您希望将其格式化为float
中的printf
float return1(void);
int main(void)
{
int x;
x = return1();
printf("%d", x);
return 0;
}
float return1()
{
return 1;
}
答案 4 :(得分:0)
不,它不应该。编译器通常不检查格式字符串和您提供的参数之间的对应关系。在你的情况下,它将能够这样做,但如果有人将字符串变量作为格式字符串传递怎么办?这就是大多数编译器没有检查通信的原因。