Escape последовательность в printf

Подскажите пожалуйста, есть ли какой-нибудь способ изменять количество отступов (в данном случае "3") в такой конструкции "%3d" с помощью цикла for, чтобы несколько вызовов printf были с разным количеством отступов?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Вместо литерала (%3d) ширину поля можно задать звёздочкой (%*d). В списке аргументов должно быть целое значение с действительной шириной:

//        ширина
//        ------ 
//       |      |
//       v      |
printf("%*d\n", w, d);
//        ^        |
//        |        |
//         --------
//         значение 

printf:

  • (optional) integer value or * that specifies minimum field width. ... In the case when * is used, the width is specified by an additional argument of type int, which appears before the argument to be converted ...
#include <stdio.h>

int main() {
    int d = 123;
    for (int w = 0; w < 20; ++w) {
        printf("%*d\n", w, d);
    }
}
$ gcc pad.c

$ ./a.out 
123
123
123
123
 123
  123
   123
    123
     123
      123
       123
        123
         123
          123
           123
            123
             123
              123
               123
                123
→ Ссылка