格式化输出函数printf
首先看一下printf函数支持的标记符号
flag | 标识 |
---|---|
- | 在给定的字段宽度内左对齐,默认是右对齐 |
+ | 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号。默认情况下,只有负数前面会显示一个 - 号 |
# | 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X;与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除 |
空格 | 如果没有写入任何符号,则在该值前面插入一个空格 |
0 | 在指定填充 padding 的数字左边放置零(0),而不是空格 |
在 % 和 输出类型(d\o\x\s\c等)直接加上上述符号就会有对应的效果,如果想左对齐输出数据,则可以使用类似 %-10s 这种来实现(字符串按10字节左对齐,不够10字节的字符串用空格填充)
中英文混杂对齐?
用上述方法输出是不能做到中英文混杂的时候也保持对齐的,这是因为为了对齐填充的空格是英文空格,输出的时候占一个光标位,而中文一个字符占用两个光标位,这样会导致填充后的字符串虽然字符数量一致但输出的时候占用的光标位不一样。比如我们想输出一个10个汉字的字符串和一个8个汉字的字符串,按照==%-20s== 对齐,那么第一个字符串后面不会添加空格,而第二个字符串后面会有2个英文空格,而printf输出8个汉字+2个空格的光标位是18个,10个汉字的光标位是20,肯定是不对齐的
所以中英文混杂的情况下,是不能用 %- 来实现左对齐的。。。