'printf() - how to add leading zeroes + padding
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?
Solution 1:[1]
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.
Solution 2:[2]
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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | nielsen |
