Reputation: 307
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?
Upvotes: 2
Views: 536
Reputation: 755026
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.
Upvotes: 5
Reputation: 7794
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);
Upvotes: 1