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.