int main()
{
int x=4;
int y=987634;
printf("%f %f",x,y);
}
在编译此代码时,我得到的输出为 0.000000 0.000000。不应该将 x 和 y 类型提升为浮点数吗?O/P 不应该是 4.000000 和 987634.000000 吗?谁能帮我这个。提前感谢。
int main()
{
int x=4;
int y=987634;
printf("%f %f",x,y);
}
在编译此代码时,我得到的输出为 0.000000 0.000000。不应该将 x 和 y 类型提升为浮点数吗?O/P 不应该是 4.000000 和 987634.000000 吗?谁能帮我这个。提前感谢。
转换发生在具有包含特定参数的原型的函数的参数上。的原型printf()
不包括第一个之后的具体参数
int printf(const char *format, ...);
因此,除了“默认参数转换”定义的参数之外,第一个参数之后不会自动转换(基本上任何等级低于 to 的整数类型和任何等级低于toint
的int
浮点类型(谢谢,Pascal Cuoq) )。您需要自己使用强制转换操作显式转换它们double
double
printf("%f %f\n", (double)x, (double)y);
哦……你真的,真的,真的应该包括有问题的原型的标题(在未定义行为的惩罚下)
#include <stdio.h>
编译器不知道您的printf
格式字符串会将参数解释为浮点数。它以 s 的形式直接通过它们int
。
因为printf
是一个可变参数函数,所以传递有意义的参数真的取决于你。
尝试printf("%i %i",x,y);
将整数打印为4 987634
. 有关printf
格式的详细信息,请参见http://www.cplusplus.com/reference/cstdio/printf/。
int
s 和float
s 在内存中的存储方式不同,但是您的编译器不知道您需要浮点数。您需要显式转换它们。
printf("%f %f",(float)x,(float)y);
可变参数函数(printf() 是其中之一)不进行类型检查,因为可变参数签名不包含任何类型信息。因此,没有隐式类型转换。您必须手动完成:
printf("%f %f", (double)x, (double)y);