Левый блокнот с пробелами - PullRequest
95 голосов
/ 16 ноября 2008

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

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

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

РЕДАКТИРОВАТЬ: Просто чтобы быть ясно, я хочу, чтобы перед каждой строкой было напечатано ровно 40 пробелов

Ответы [ 4 ]

105 голосов
/ 16 ноября 2008

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

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

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

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

61 голосов
/ 26 февраля 2012

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

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}
32 голосов
/ 28 марта 2014
int space = 40;
printf("%*s", space, "Hello");

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

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

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

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

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

16 голосов
/ 16 ноября 2008

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

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

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

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

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

...