stitch123
stitch123

Reputation: 307

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?

Upvotes: 2

Views: 536

Answers (2)

Jonathan Leffler
Jonathan Leffler

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

nielsen
nielsen

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

Related Questions