用于打印的转换说明符

转换说明符 参数类型 描述
i,d INT 打印小数
u unsigned int 打印小数
o unsigned int 打印八进制
x unsigned int 打印十六进制,小写
X unsigned int 打印十六进制,大写
f double 如果没有给出精度,则打印浮点数,默认精度为 6(小写字母用于特殊数字 nan 和 inf 或 infinity)
F double 如果没有给出精度,则打印浮点数,默认精度为 6(大写字母用于特殊数字 NAN 和 INF 或 INFINITY)
e double 如果没有给出精度,则使用默认精度 6 打印浮点数,使用科学记数法使用尾数/指数; 小写指数和特殊数字
E double 如果没有给出精度,则使用默认精度 6 打印浮点数,使用科学记数法使用尾数/指数; 大写指数和特殊数字
g double 使用 f 或 e [见下文]
G double 使用 F 或 E [见下文]
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)。

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

使用 g 和 G 格式,e 和 f(或 E 和 F)表示法之间的选择记录在 C 标准和 printf() 的 POSIX 规范中 :

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

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

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