Left-pad printf с пробелами

Как я могу заполнить строку пробелами слева при использовании printf?

например, я хочу напечатать "Hello" с 40 пробелами перед ним.

кроме того, строка, которую я хочу напечатать, состоит из нескольких строк. Нужно ли печатать каждую строку отдельно?

EDIT: просто чтобы быть ясным, я хочу, чтобы перед каждой строкой было напечатано ровно 40 пробелов.

4 ответов


Если вы хотите, чтобы слово "Hello" печаталось в столбце шириной 40 символов с пробелами слева, используйте следующее.

char *ptr = "Hello";
printf("%40s\n", ptr);

Это даст вам 35 пробелов, затем слово "Привет". Вот как вы форматируете материал, когда знаете, как широко вы хотите столбец, но данные меняются (ну, это один как вы можете сделать это).

Если вы знаете, что хотите ровно 40 пробелов, то некоторый текст, просто сохраните 40 пробелов в константе и распечатайте их. Если вы нужно напечатать несколько строк, либо использовать несколько printf операторы, подобные приведенным выше, или делают это в цикле, изменяя значение ptr каждый раз.


Я использую эту функцию для отступа моего вывода (например, для печати древовидной структуры). The indent - количество пробелов перед строкой.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

int space=40;
printf("%*s",space,"Hello");

этот оператор зарезервирует столбец из 40 символов, напечатает строку в конце столбца (не после столбца,в последних столбцах.Общее количество используемых столбцов будет 40). То же самое можно использовать для цифр и целых чисел следующим образом

printf("%*d",space,10);
printf("%*c",space,'');

этот метод использования переменных пространств полезен в вызовах функций, где требуется переменное количество пространств.Эти операторы по-прежнему будут работать с постоянными целыми числами следующим образом

printf("%*d",10,10);
printf("%*c",20,'');
printf("%*s",30,"Hello");

надеюсь, это поможет кто-то вроде меня в будущем.


если вы хотите ровно 40 пробелов перед строкой, то вы должны просто сделать:

printf("                                        %s\n", myStr );

если это слишком грязно, вы можете сделать (но это будет медленнее, чем вручную вводить 40 пробелов): printf("%40s%s", "", myStr );

если вы хотите, чтобы строка была выровнена в столбце 40 (то есть до 39 пробелов, продолжающих ее так, что самый правильный символ находится в столбце 40) , то сделайте это: printf("%40s", myStr);

вы также можете поместить" до " 40 пробелов после строки, выполнив: printf("%-40s", myStr);