Ответ 1
Вы можете указать ширину в строковых полях, например.
printf("%-20s", "initialization...");
а затем все, что напечатано с этим полем, будет заполнено пробелом до указанной вами ширины.
-
влево - выравнивает текст в этом поле.
У меня есть две функции, одна из которых создает такие сообщения, как Starting initialization...
, а другая, которая проверяет коды возврата и выходы "Ok"
, "Warning"
или "Error"
. Однако выход, который создается, имеет разную длину:
Starting initialization...Ok.
Checking init scripts...Ok.
Как я могу получить что-то вроде этого:
Starting initialization... Ok.
Checking init scripts... Ok.
Вы можете указать ширину в строковых полях, например.
printf("%-20s", "initialization...");
а затем все, что напечатано с этим полем, будет заполнено пробелом до указанной вами ширины.
-
влево - выравнивает текст в этом поле.
printf
позволяет форматировать с помощью спецификаторов ширины. например.
printf( "%-30s %s\n", "Starting initialization...", "Ok." );
Вы использовали бы спецификатор отрицательной ширины, чтобы указать выравнивание по левому краю, поскольку по умолчанию используется правовое обоснование.
Также существует модификатор %n
, который может помочь при определенных обстоятельствах. Он возвращает столбец, на котором строка была до сих пор. Пример: вы хотите написать несколько строк, которые находятся в пределах ширины первой строки, например таблицы.
int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);
for(i=0; i<6; i++)
printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);
будет печатать 2 столбца одинаковой ширины любой длины, которые могут иметь две строки header1
и header2
.
Я не знаю, имеют ли все реализации %n
, но Solaris и Linux делают.
Кроме того, если вам нужна гибкость при выборе width
, вы можете выбрать один из следующих двух форматов (с усечением или без него):
int width = 30;
//no truncation
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
//truncated to the specified width
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." );
Там также довольно низкотехнологичное решение для подсчета добавленных мест вручную, чтобы ваши сообщения выстраивались в линию. Ничто не мешает вам включать несколько строк в строки сообщений.
Начните с использования Tabs, модификатора символов \t. Он переместится в фиксированное местоположение (столбцы, терминальный жаргон). Однако это не помогает, если есть различия больше ширины столбца (4 символа, если я правильно помню).
Чтобы исправить это, напишите свой материал "OK/NOK", используя фиксированное количество вкладок (5? 6?, попробуйте), затем верните (\r) без новой подкладки и напишите ваше сообщение.