c - 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);
解决方案
以下是对可能的 printf 格式的正确理解吗?
“一般”是的,但例如你“不能”做%jg
或喜欢%0#p
。
还有%n
.
“精度”和“填充”都可能是星号,例如%*s
或%.*s
(但您可以定义num
为([0-9]+|\*)
...)。
也.
可选地后跟一个数字。所以它更像是<precision: [. num? ]>
- 如果仅.
指定,则精度为零。
是订单
的顺序- +#0
无关紧要,您可以重复它们,因此您可以%-+020d
并且%+0-+++000----20d
具有相同的含义(并且0
在与 一起使用时被忽略-
,因此也存在极端情况)。
上面的意思正确吗?
上面没有解释。-
不是“对齐”(字面意思是一个词?),它是一个标志,使输出在 field 内左对齐。含义也取决于上下文 - 浮点数的“精度”可能可以理解为逗号后的位数,但“字符串的精度”听起来很奇怪。但一般来说,是的。