首页 > 解决方案 > Printf 格式说明符

问题描述

我一直在尝试将格式拼凑printf成一种线性格式。printf以下是对可能格式的正确理解吗?

% <justification: [-]?> <sign: [ +]?>  <alternate: [#]?> 
  <padding: [0? num]?> <precision: [.num]?> <modifier: [h|hh|l|ll|L|z|t|j]?>
  <format: [c|d(i)|e(E)|f|o|p|x(X)|u|s|g(G)]>

上面的顺序和含义是否正确?几个例子是:

printf(" %-10.3s %-+20ld", "Hello!", 14L);

标签: c

解决方案


以下是对可能的 printf 格式的正确理解吗?

“一般”是的,但例如你“不能”做%jg或喜欢%0#p

还有%n.

“精度”和“填充”都可能是星号,例如%*s%.*s(但您可以定义num([0-9]+|\*)...)。

.可选地后跟一个数字。所以它更像是<precision: [. num? ]>- 如果仅.指定,则精度为零。

是订单

的顺序- +#0无关紧要,您可以重复它们,因此您可以%-+020d并且%+0-+++000----20d具有相同的含义(并且0在与 一起使用时被忽略-,因此也存在极端情况)。

上面的意思正确吗?

上面没有解释。-不是“对齐”(字面意思是一个词?),它是一个标志,使输出在 field 内对齐。含义也取决于上下文 - 浮点数的“精度”可能可以理解为逗号后的位数,但“字符串的精度”听起来很奇怪。但一般来说,是的。


推荐阅读