2016-06-24 3 views
3

Какой способ лучше всего выстроить весь выход справа?Печать с отступом в C

Пример: для степеней 2:

 2 
     4 
     8 
     16 
     32 
     64 
     128 
     256 
     512 
    1024 
    2048 

    ... 

134217728 

Если мой последний номер имеет N цифр, как напечатать первый (который в данном случае имеет только одну цифру) с (N - 1) пространства по левой стороне ?

+5

Hont: Взгляд вверх параметр формата для 'printf'. –

+1

Вы можете использовать '*' для ширины поля в 'printf'. Затем он получает ширину от параметра. – Barmar

+2

[документация для семейства функций 'printf'] (http://en.cppreference.com/w/c/io/fprintf) - гораздо лучший ресурс для попадания в этот сайт. – WhozCraig

ответ

4

Вы можете поставить вычисленную ширину поля для printf() с помощью *. Таким образом, после того, как рассчитать максимальное количество цифр, вы можете сделать:

printf("%*d\n", max_digits, value); 
2

Вы можете использовать ширину трюк printf как сказал здесь: Printf reference

printf ("Width trick: %*d \n", 5, 10);

будет производить

Width trick: 10

1

Пример

int main(int argc, char *argv[]) { 
    for (int i=2; i<134217729;i=i*2) 
     printf("%*d\n",20, i); 
    return 0; 
} 

Выход

  2 
      4 
      8 
      16 
      32 
      64 
     128 
     256 
     512 
     1024 
     2048 
     4096 
     8192 
     16384 
     32768 
     65536 
     131072 
     262144 
     524288 
    1048576 
    2097152 
    4194304 
    8388608 
    16777216 
    33554432 
    67108864 
    134217728 
+0

Что делать, если я использовал символ вместо чисел? –

+2

Он работает точно так же, * флаги * одинаковы для каждого * спецификатора преобразования *. –

+1

@ ViníciusGuardianoSouza Вы можете использовать 'strlen (char *)', чтобы найти длину строки в C, а затем отформатируйте ее соответствующим образом. –