如何使用%f说明符打印整数数字?

时间:2014-01-25 17:57:00

标签: c

#include<stdio.h>
main()
{
   int a = 66;
   printf("%f", a);
}

打印0.0000作为答案,为什么?

%f已替换为%c正在打印B。我没理由。

请解释!!

5 个答案:

答案 0 :(得分:5)

这是因为您的程序调用未定义的行为。你可能得到任何预期或意外的东西。

C11:7.29.2格式化宽字符输入/输出功能:

  

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

printf("%f",a);  
         ^ %f specifier expects arguments of type float/ double.  
  

%f被替换为%c它正在打印B.我没有得到原因

字符B的ASCII代码为66。使用%c说明符打印(可打印)字符本身。

答案 1 :(得分:3)

printf()

  

[...]如果任何参数不是相应转换说明符所期望的类型,或者参数少于格式所需的参数,则行为未定义。如果格式需要的参数多于所需的参数,则会评估并忽略无关的参数[...]

虽然,对于%c,您正确获得了预期的'B'ASCII code66),但不推荐(传入{{1时成像)因为没有ASCII代码是666,所以会得到意想不到的结果。至少,您应该事先进行打字:

666

同样,请记住始终对不同类型使用相应的说明符。

答案 2 :(得分:2)

如果使用%f说明符并且不提供浮点数,但是int,则行为未定义。实际上,在int所在位置开始的内存将被解释为float number,因此打印的内容取决于int和float的内部表示。 对于%c,你得到B,因为%c将你的int解释为字符代码,而B的代码是66。

答案 3 :(得分:1)

%f用于打印浮点数 %c用于打印字符 %d用于打印整数

所以当你使用%c printf函数从ascii值转换为B的字符时

如果要打印整数

的printf( “%d”,一);

答案 4 :(得分:0)

%c将与66对应的字符打印到ascii表中。 默认情况下,%f将在小数点后打印5位数,但您可以使用%.3f(3位数)更改行为