Как Отформатировать строки с помощью printf (), чтобы получить равную длину на выходе?
у меня есть две функции, одна из которых производит сообщения типа Starting initialization...
и еще один, который проверяет, коды возврата и выходы "Ok"
,"Warning"
или "Error"
. Однако выход, который производится, имеет разную длину:
Starting initialization...Ok.
Checking init scripts...Ok.
как я могу сделать что-то вроде этого:
Starting initialization... Ok.
Checking init scripts... Ok.
6 ответов:
вы можете указать ширину в строковых полях, например
printf("%-20s", "initialization...");
и тогда все, что печатается с этим полем, будет пустым-дополнено до указанной ширины.
The
-
слева-выравнивает текст в этом поле.
printf
позволяет форматировать с помощью спецификаторов ширины. например,printf( "%-30s %s\n", "Starting initialization...", "Ok." );
вы бы использовали отрицательный спецификатор ширины для указания выравнивания по левому краю, потому что по умолчанию используется выравнивание по правому краю.
кроме того, если вы хотите гибкость выбора
width
, вы можете выбрать один из следующих двух форматов (с или без усечения):int width = 30; //no truncation uses %-*s printf( "%-*s %s\n", width, "Starting initialization...", "Ok." ); // output is "Starting initialization... Ok." //truncated to the specified width uses %-.*s printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." ); // output is "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 делают.
там также довольно низкотехнологичное решение подсчета добавляя пробелы вручную, чтобы сделать ваши сообщения выстраиваются в линию. Ничто не мешает вам включить несколько конечных пробелов в строки сообщения.
начните с использования вкладок, \t символ модификатора. Он будет продвигаться в фиксированное место (столбцы, терминальный жаргон). Однако, это не помогает, если есть различия больше, чем ширина столбца (4 символа, если я правильно помню).
чтобы исправить это, напишите свой материал "OK / NOK", используя фиксированное количество вкладок (5? 6?, попробуйте), а затем вернуться (\r) без новой подкладки, и напишите свое сообщение.