I want to pad a column so it's 8 characters wide, and make integers left-aligned with at most one leading zero like this:
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
I know how to add the leading zeroes (printf("%02d\n", integer)) or the padding (printf("%-8d\n", integer)), but I don't know how to combine the two. Is there an easy way to achieve this?
Specify the minimum field width (8) and the precision (.2) and left-justification (-) — see fprintf() — like this:
#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;
}
Output (on macOS 12.3):
[00 ]
[01 ]
[07 ]
[11 ]
[14 ]
[314159 ]
This seems to be what you want.
When adding the leading zeroes and assuming that the numbers do not exceed the resulting width (in this case 2, i.e. that the integers are between -9 and 99), the width is constant so the padding can be inserted as a fixed number of spaces:
printf("[%02d ]\n", integer);