мне нужно помощь, чтобы понять этот фрагмент кода и выход он генерирует:Понимание Printf форматирования
int hh=16;
static char wer[]="no substitute for hard work";
printf("%-10.*s", hh, wer);
мне нужно помощь, чтобы понять этот фрагмент кода и выход он генерирует:Понимание Printf форматирования
int hh=16;
static char wer[]="no substitute for hard work";
printf("%-10.*s", hh, wer);
Давайте посмотрим на формат строке по одному в 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.
В строке формата.
printf("%-10.*s", hh, wer);
-10
устанавливает ширину строки 10 пространств и строка будет выровнен по левому краю.
.*
в контексте s
спецификатор определяет количество символов, подлежащих печати.
Единственное, что я хочу сделать, это то, что -x
(-10 в вашем случае) не влияет на количество символов, которые будут напечатаны. Если количество символов превышает ширину, то при указании ширины нет смысла.
Практически x
должен быть как минимум равным (желательно большим) до длины самой большой строки, для которой требуется хорошее форматирование.
Какую часть вы все еще не понимаете, прочитав документацию 'printf'? –
Как работает отрицательная точность? –
Не существует отрицательной точности. Дефис изменяет 's' (это означает левое оправдание), точность положительная' 10' –