C 如何使用%f说明符打印整数? #包括 main() { INTA=66; printf(“%f”,a); }

C 如何使用%f说明符打印整数? #包括 main() { INTA=66; printf(“%f”,a); },c,C,它正在打印0.0000作为答案,为什么 而%f被替换为%c它正在打印B。我不明白原因 请解释 对于: […]如果任何参数不是相应转换说明符所期望的类型,或者如果参数少于格式所需的参数,则行为未定义。如果参数多于格式要求的数量,则会计算并忽略无关参数[…] 虽然对于%c,您正确地获得了预期的'B'(其为66),但不建议这样做(当您传入666时进行成像,这将得到意外的结果,因为没有ASCII代码是666)。至少,您应该事先进行类型转换: #include<stdio.h> main()

它正在打印
0.0000
作为答案,为什么

%f
被替换为
%c
它正在打印
B
。我不明白原因

请解释

对于:

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

虽然对于
%c
,您正确地获得了预期的
'B'
(其为
66
),但不建议这样做(当您传入
666
时进行成像,这将得到意外的结果,因为没有ASCII代码是
666
)。至少,您应该事先进行类型转换:

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

再次强调,请记住始终为不同类型使用相应的说明符。

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

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

因此,当您使用%c printf函数将ascii值转换为B字符时

如果要打印整数


printf(“%d”,a)

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

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

C11:7.29.2格式化宽字符输入/输出功能: 如果转换规范无效,则行为未定义.335)如果任何参数不是相应转换规范的正确类型,则行为为 未定义

%f被%c替换,它正在打印B。我不明白原因


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

66是字母
B
.Garbage-In==Garbage-Out
%f被替换为%c,它正在打印B。如果您知道读取链接的答案,为什么它是未定义的行为,我不知道原因。
,所以它应该在打印0.0000时打印垃圾值为什么?未定义意味着未定义@user3235767由于未定义所发生的情况,因此打印0.0000与其他任何内容一样有效或无效。是否希望“默认情况下
%f”
将在小数点后打印6位数字”?
printf("%f", (float)a);
printf("%c", (char)a);
printf("%f",a);  
         ^ %f specifier expects arguments of type float/ double.