可能重复:
What is printf’s behaviour when printing an int as float?
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吗? 谁能帮我这个。提前完成。
答案 0 :(得分:5)
对包含特定参数的原型的函数的参数进行转换。 printf()
的原型不包括第一个
int printf(const char *format, ...);
所以,第一个之后没有参数自动转换,除非“默认参数转换”定义(基本上任何排名低于int
的整数类型到int
和任何浮点类型排名低于double
到double
(谢谢你,Pascal Cuoq ))。您需要使用强制转换操作
printf("%f %f\n", (double)x, (double)y);
哦......你真的,真的,真的应该包含有问题原型的标题(在未定义行为的惩罚下)
#include <stdio.h>
答案 1 :(得分:1)
编译器不知道您的printf
格式字符串会将参数解释为浮点数。它将它们直接传递为int
s。
因为printf
是一个varargs函数,所以你需要传递有意义的参数。
答案 2 :(得分:0)
尝试printf("%i %i",x,y);
将整数打印为4 987634
。有关printf
格式详细信息,请参阅http://www.cplusplus.com/reference/cstdio/printf/。
答案 3 :(得分:0)
int
和float
在内存中的存储方式不同,但您的编译器不知道您想要浮点数。您需要明确地转换它们。
printf("%f %f",(float)x,(float)y);
答案 4 :(得分:0)
变量函数(printf()为1)未进行类型检查,因为可变参数不包含任何类型信息。因此,没有隐式类型转换。你必须手动完成:
printf("%f %f", (double)x, (double)y);