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  ]

这似乎是你想要的。