Как лучше отформатировать оператор printf, чтобы все выровнялось - PullRequest
2 голосов
/ 03 декабря 2009

У меня есть это утверждение printf:

 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);

Он внутри цикла for, поэтому печатает несколько строк для списка указателей.

Проблема в том, что если некоторые из напечатанных документов длиннее или короче, это приводит к тому, что они не выстраиваются в линию. Как мне заставить его всегда выстраиваться?

Ответы [ 3 ]

8 голосов
/ 03 декабря 2009

Каждому спецификатору преобразования может быть присвоено поле ширины, в котором указано минимальное количество символов, которое будет использовать преобразование. Существуют и другие флаги и точность, которые можно использовать для управления выводом (например, при преобразовании %s элемент точности сообщает, сколько символов будет использовано максимально).

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);
3 голосов
/ 03 декабря 2009

Как сказал дтроссет:

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

Вот некоторая документация по строкам формата printf:

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

Просто убедитесь, что указанная вами ширина поля больше, чем вы ожидаете печатать. Например, если вы укажете% 2d, а затем напечатаете 555, он все равно будет печататься с 3 символами, даже если остальные поля будут состоять из 2 символов, и не выстроится так, как вы хотите.

3 голосов
/ 03 декабря 2009

Используйте конкретное число для максимальной длины строки, в данном случае 12:

printf("name: %12s", sp->name);
...