printf ("% 2d") в программировании на C - PullRequest
0 голосов
/ 08 апреля 2019

Я видел так много вопросов и ответов на stackoverflow и других сайтах, но я так растерялся, что когда% 2d создал 2 символьных пространства и мы хотим выполнить этот код, что тогда должно произойти?

int a = 20011;
printf("%2d\n",a);

Согласно моей точке зрения, он должен печатать только 2 символа в ширину, но когда мы печатаем, он печатает весь символ. Почему?

Я редактировал этот вопрос. Теперь я хотел бы знать, что то, что используется - знак. Я прочитал так много статей, в которых говорится - знак указывает на выравнивание по левому краю, но когда он используется, приведите пример. например:

int str[] = "skgskg";
 printf("%2s\n",str);

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

В соответствии со стандартом C, это число является шириной поля минимум .Если преобразованное значение содержит меньше символов, чем минимальное поле с, оно дополняется пробелами.Если он имеет то же число или более, печатается все преобразованное значение - оно не уменьшается до заданной ширины.

Цитирование из C 2018 7.21.6.1 4:

Anнеобязательный минимум ширина поля .Если преобразованное значение имеет меньше символов, чем ширина поля, оно дополняется пробелами (по умолчанию) слева (или справа, если был задан левый флажок регулировки, описанный ниже) ширине поля.Ширина поля принимает форму звездочки * (описывается позже) или неотрицательного десятичного целого числа.

Это всего лишь часть абзаца 4. В целом он дает полный формат спецификации преобразования, который представляет собой %, за которым следуют:

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

- Необязательный минимум ширина поля .Если преобразованное значение имеет меньше символов, чем ширина поля, оно дополняется пробелами (по умолчанию) слева (или справа, если был задан левый флажок регулировки, описанный ниже) ширине поля.Ширина поля принимает форму звездочки * (описывается позже) или неотрицательного десятичного целого числа.

- необязательная точность , которая дает минимальное количество цифр для отображения *Преобразования 1028 *, i, o, u, x и X, количество цифр после знака десятичной точки для a, A, e,Преобразования E, f и F, максимальное количество значащих цифр для преобразований g и G или максимальное число байтов, которое должно быть записано для преобразований s.Точность принимает форму периода (.), за которым следует звездочка * (описана ниже) или необязательное неотрицательное десятичное целое число;если указан только период, точность принимается равной нулю.Если точность появляется с любым другим спецификатором преобразования, поведение не определено.

- Необязательный модификатор длины , который определяет размер аргумента.

- A спецификатор преобразования символ, указывающий тип применяемого преобразования.

1 голос
/ 08 апреля 2019

Указывает минимальную ширину, которой должен быть вывод.Если указанная ширина больше размера самого вывода (в противоположность вашему случаю), то разница между длиной вашего вывода и указанной шириной будет напечатана в виде пробелов перед вашим выводом.

Итакнапример, printf("%2d\n", 12345); будет просто печатать 12345, поскольку 12345 имеет 5 цифр, но указана ширина только 2.

Однако printf("%10d\n", 12345); будет печатать _____12345 (за 5 пробелов до 12345), так как разница между шириной превышает длину вывода на 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...