Home > Software design >  printf() - how to add leading zeroes padding
printf() - how to add leading zeroes padding

Time:03-20

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("d\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?

CodePudding user response:

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.

CodePudding user response:

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("[d      ]\n", integer);
  • Related