用于打印的转换说明符

转换说明符 参数类型 描述
id INT 打印小数
u unsigned int 打印小数
o unsigned int 打印八进制
x unsigned int 打印十六进制,小写
X unsigned int 打印十六进制,大写
f double 如果没有给出精度,则打印浮点数,默认精度为 6(小写字母用于特殊数字 naninfinfinity
F double 如果没有给出精度,则打印浮点数,默认精度为 6(大写字母用于特殊数字 NANINFINFINITY
e double 如果没有给出精度,则使用默认精度 6 打印浮点数,使用科学记数法使用尾数/指数; 小写指数和特殊数字
E double 如果没有给出精度,则使用默认精度 6 打印浮点数,使用科学记数法使用尾数/指数; 大写指数和特殊数字
g double 使用 fe [见下文]
G double 使用 FE [见下文]
a double 打印十六进制,小写
A double 打印十六进制,大写
c Char 打印单个字符
s 字符* 如果指定,则打印字符串直到 NUL 终止符,或截断为精度给定的长度
p 无效* 打印 void 指针值; nonvoid 指针应明确转换(cast)到 void*; 指向对象的指针,而不是函数指针
% N / A 打印%字符
n int * 到目前为止打印的字节数写入指向的 int

请注意,长度修饰符可以应用于%n(例如,%hhn 表示以下 n 转换说明符适用于指向 signed char 参数的指针,根据 ISO / IEC 9899:2011§7.21.6.1¶7)。

请注意,浮点转换适用于类型 floatdouble,因为默认促销规则 - 第 6.5.2.2 节函数调用,¶7 函数原型声明符中*的省略号表示法导致参数类型转换在最后声明的参数之后停止。**默认参数提升是在尾随参数上执行的。*因此,printf() 等函数只能传递 double 值,即使引用的变量是 float 类型。

使用 gG 格式,ef(或 EF)表示法之间的选择记录在 C 标准和 printf() 的 POSIX 规范中 :

表示浮点数的双参数应以 fe 的样式转换(或者在 G 转换说明符的情况下以 FE 的样式转换),具体取决于转换的值和精度。如果非零,则 P 等于精度,如果省略精度,则为 ti,如果精度为零,则为 1。然后,如果使用样式 E 的转换将具有 X 的指数:

  • 如果 P> X> = -4,则转换应采用 f(或 F)和 precision P - (X+1) 的样式。
  • 否则,转换应采用 e(或 E)和 precision P - 1 的样式。

最后,除非使用’#‘标志,否则应从结果的小数部分中删除任何尾随零,如果没有剩余小数部分,则应删除小数点字符。