2016-04-23 4 views
-5

мне нужно помощь, чтобы понять этот фрагмент кода и выход он генерирует:Понимание Printf форматирования

int hh=16; 
static char wer[]="no substitute for hard work"; 
printf("%-10.*s", hh, wer); 
+4

Какую часть вы все еще не понимаете, прочитав документацию 'printf'? –

+0

Как работает отрицательная точность? –

+3

Не существует отрицательной точности. Дефис изменяет 's' (это означает левое оправдание), точность положительная' 10' –

ответ

2

Давайте посмотрим на формат строке по одному в printf("%-10.*s", hh, wer);

`-` The flag. It means the converted value is to be left adjusted on the field boundary. 

`10` The field width, an optional decimal digit string (with nonzero first digit) specifying a minimum field width. 

`.*` The precision, in the form of a period ('.') followed by an optional decimal digit string. Instead of a decimal digit string one may write "*" to specify that the precision is given in the next argument, which must be of type int. So the `hh` arguments correspond to this precision field. 

`s` Specify the format as a string. 

Для объединения, в printf отпечатках строка wer, с минимальной шириной 10, с левой скорректированной точностью с точностью hh, которая равна 16.

1

В строке формата.

printf("%-10.*s", hh, wer); 

-10 устанавливает ширину строки 10 пространств и строка будет выровнен по левому краю.

.* в контексте s спецификатор определяет количество символов, подлежащих печати.

Единственное, что я хочу сделать, это то, что -x (-10 в вашем случае) не влияет на количество символов, которые будут напечатаны. Если количество символов превышает ширину, то при указании ширины нет смысла.

Практически x должен быть как минимум равным (желательно большим) до длины самой большой строки, для которой требуется хорошее форматирование.

Смежные вопросы