Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to format printf statement better so things always line up

I have this printf statement:

 printf("name: %s\t"
        "args: %s\t"
        "value %d\t"
        "arraysize %d\t"
        "scope %d\n",
         sp->name,
         sp->args,
         sp->value,
         sp->arraysize,
         sp->scope);

It's inside a for loop, so it's printing multiple lines for a list of pointers.

The problem is that if some of the things that are printed are longer or shorter, it causes things to not line up. How do I get it to always line up?

like image 655
neuromancer Avatar asked Nov 17 '25 21:11

neuromancer


2 Answers

Each conversion specifier can be given a field width which give the minimum number of characters that conversion will use. There are other flags and precision that can be used to control the output (for example with the %s conversion the precision item says how many characters maximum will be used).

printf("name: %20.20s\t"
        "args: %10.10s\t"
        "value %6d\t"
        "arraysize %6d\t"
        "scope %6d\n",
         sp->name,
         sp->args,
         sp->value,
         sp->arraysize,
         sp->scope);
like image 162
Michael Burr Avatar answered Nov 20 '25 18:11

Michael Burr


Like dtrosset said:

printf("name: %12s\t"
       // etc...

Here is some documentation on printf format strings:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Just make sure that the field width you specify is larger than whatever you expect to be printing. If you specify %2d, for instance, and then print 555, it will still print with 3 characters even though the rest of your fields are 2 characters, and it won't line up the way you want it to.

like image 41
ryan_s Avatar answered Nov 20 '25 17:11

ryan_s



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!