printf() - 如何添加前导零 + 填充
printf() - how to add leading zeroes + padding
我想填充一列,使其宽度为 8 个字符,并使整数左对齐,最多有一个前导零,如下所示:
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
我知道如何添加前导零 (printf("%02d\n", integer)
) 或填充 (printf("%-8d\n", integer)
),但我不知道如何将两者结合起来。有没有简单的方法可以做到这一点?
当添加前导零并假设数字不超过结果宽度(在本例中为 2,即整数介于 -9 和 99 之间)时,宽度是恒定的,因此可以插入填充作为固定数量的空格:
printf("[%02d ]\n", integer);
指定最小字段宽度 (8
) 和精度 (.2
) 和 left-justification (-
) — 参见 fprintf()
— 像这样:
#include <stdio.h>
int main(void)
{
int array[] = { 0, 1, 7, 11, 14, 314159 };
enum { NUM_ARRAY = sizeof(array) / sizeof(array[0]) };
for (int i = 0; i < NUM_ARRAY; i++)
printf("[%-8.2d]\n", array[i]);
return 0;
}
输出(在 macOS 12.3 上):
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
[314159 ]
这似乎是你想要的。
我想填充一列,使其宽度为 8 个字符,并使整数左对齐,最多有一个前导零,如下所示:
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
我知道如何添加前导零 (printf("%02d\n", integer)
) 或填充 (printf("%-8d\n", integer)
),但我不知道如何将两者结合起来。有没有简单的方法可以做到这一点?
当添加前导零并假设数字不超过结果宽度(在本例中为 2,即整数介于 -9 和 99 之间)时,宽度是恒定的,因此可以插入填充作为固定数量的空格:
printf("[%02d ]\n", integer);
指定最小字段宽度 (8
) 和精度 (.2
) 和 left-justification (-
) — 参见 fprintf()
— 像这样:
#include <stdio.h>
int main(void)
{
int array[] = { 0, 1, 7, 11, 14, 314159 };
enum { NUM_ARRAY = sizeof(array) / sizeof(array[0]) };
for (int i = 0; i < NUM_ARRAY; i++)
printf("[%-8.2d]\n", array[i]);
return 0;
}
输出(在 macOS 12.3 上):
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
[314159 ]
这似乎是你想要的。