C/C++中格式化输出的format

就是 C 中 printf() 的 format 标签。

format 标签属性是 %[flag][width][.precision][length]specifier

specifier

  • c, 字符
  • d/i,有符号十进制整数
  • e,使用 e 字符的科学计数法
  • E,使用 E 字符的科学计数法
  • f,十进制浮点数
  • g,自动选择 %e 或 %f 中合适的表示法
  • G,自动选择 %E 或 %f 中合适的表示法
  • o,有符号八进制
  • s,字符的字符串
  • u,无符号十进制整数
  • x,无符号十六进制整数
  • X,无符号十六进制整数(大写字母)
  • p,指针地址
  • n,无输出
  • %,字符

flag

  • -,给定宽度内左对齐(默认右对齐)
  • +,强制在结果之前显示 +/-
  • (space),如果没有写入任何字符,则在该值前面插入一个空格
  • #
    • 如果和 o/x/X 使用,非零值前面会分别显示 0/0x/0X
    • 如果和 e/E/f 使用,会强制输出包含一个小数点,即使后面没有数字也会显示小数点(默认情况下,如果后面没有数字的时候,不会显示小数点)
    • 如果和 g/G 使用,结果与 e/E 相同,但是尾部的零不会被移除
  • 0,在制定填充 padding 的数字的左边放置 0,而不是空格。

width

  • (number),要输出字符的最小数目。如果输出的值小于该数,则被空格填充,如果长于,也不会被截断
  • *,宽度在 format 字符串中为指定,但是会作为附加的整数值参数放置于将要被格式化的参数之前

.precision

  • .number,指定了写入的数字的最小位数
    • e/E/f,在小数点后输出的小数位数
    • g/G,要输出的最大有效位数
    • s,要输出的最大字符数
    • c,no impact
    • 未指定任何精度时,默认为 1。如果指定时不带一个显式值,则假定为 0
  • .*,同 width 中 *

length

  • h,参数被解释为短整型
  • l,参数被解释成长整型
  • L,参数被解释成长双精度型

References