printf函数的行为和转换

时间:2018-12-07 17:57:34

标签: c linux

我想知道为什么printf每次运行都会给我一些固定值。 我的代码在下面,请帮助我理解。

    #include<stdio.h>
    int main()
    {
    float i=10.25,a=5.25;
    printf("%d\n",a);
    return 0;
    }

正在返回11010048

我知道%f用于浮点数,并且用于打印浮点数,我必须使用%f,但是这里的问题是为什么%d返回常量值,要么返回一些垃圾值,要么应该是编译错误。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果使用-Wall -Wextra进行编译,则会得到以下输出:

x1.c:5:14: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
     printf("%d\n",a);
              ^

由于printf是可变函数,因此该语言允许您在格式字符串之后传递任意数量的任何类型的变量。但是,由于格式说明符不匹配,该功能在这种情况下不允许使用。因此,不需要编译器发出诊断信息,但在这种情况下,如果您发出警告,它将发出诊断信息。

关于为什么保持相同的值而不是“垃圾”的原因,错误的值。没有什么可以说结果应该是一致还是不一致。这就是undefined behavior表现出来的方式之一。

答案 1 :(得分:0)

您无法使用%d打印浮动字体,您应该尝试%f

%d是带符号的十进制整数

尝试

printf("%f\n,a);

我建议您通过此链接查看: here