为什么printf(“%。1f”,1)输出0.0

时间:2014-12-20 15:44:07

标签: c printf

我使用代码块

代码为:

printf("%.1f", 1);

程序可以运行,输出为0.0。我想知道为什么。 `

3 个答案:

答案 0 :(得分:7)

将其更改为:

printf("%.1f", 1.0);

f转换说明符需要double类型的参数,但您传递的int值(1的类型为int)。将错误类型的参数传递给printf会调用未定义的行为。

答案 1 :(得分:4)

使用错误的格式说明符调用未定义的行为。您可能会得到预期或意外的结果。如果您使用%d,则使用printf代码,因为传递给int的参数为1类型,或将1.0更改为%f

C11:7.21.6(p9):

  

如果转换规范无效,则行为未定义。 282)如果任何参数是   不是相应转换规范的正确类型,行为是   未定义。

答案 2 :(得分:0)

格式不正确,你应该给一个float或一个double作为printf函数的第二个参数。 gcc编译器还会对程序员的错误发出警告。

 printf("%.1f",1.23);

输出:

 1.2

小心这些错误。祝你好运!