Скачиваний:
65
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

Задание ширины поля и точности

Спецификации формата могут также включать информацию о минимальной ширине (width) поля, в котором выводится аргумент, и точности (precision). В случае целочисленного аргумента под точностью понимается максимальное число выводимых цифр. Если аргумент имеет тип single или double, то точность задает число цифр после десятичной точки. Для строчного аргумента этот параметр определяет число символов, которые будут взяты из строки.

Значения ширины поля и точности находятся в спецификации формата сразу же после знака процента и разделены точкой, например, спецификация

%10.5d

означает: вывести соответствующий аргумент типа integer в поле шириной 10 символов; если аргумент имеет меньше пяти цифр, то дополнить его спереди нулями до пяти знаков. Спецификация

%.5f

означает: вывести соответствующий аргумент типа single или double с точностью до пяти десятичных знаков после запятой. Этот пример также показывает, что можно опускать параметр ширины поля. Аналогично можно задавать только ширину поля, поэтому спецификация

%10s

показывает: вывести соответствующую строку в поле длиной не менее 10 символов.

Во всех приведенных примерах вывод будет выравниваться по правой границе заданного поля. Для выравнивания по левой границе нужно задать знак минус сразу же за символом процента. Например, спецификация

%-30s

означает, что соответствующий строчный аргумент будет выведен в левой части поля шириной не менее 30 символов.

Может случиться, что ширина спецификации формата не может быть вычислена до запуска программы. В этом случаем можно заменить спецификацию ширины поля символом (*). Тогда процедура printf будет ожидать для этого кода дополнительный аргумент типа integer, определяющий ширину поля. Поэтому выполнение оператора

var

width, iarg:integer;

.

.

.

printf('%*d', [width, iarg]);

приведет к тому, что целочисленная переменная iarg будет выведена в поле шириной width.

Комплексный пример

Число возможных комбинаций различных форматов огромно, поэтому для экономии места в одну программу были включены сразу несколько примеров. Функция arctan является стандартной функцией арктангенса из математической библиотеки math.

(* Программа cram - демонстрация процедуры printf *)

uses stdio,math;

const

weekday:pchar = 'Воскресенье';

month:pchar = 'Сентября';

str:pchar = 'Hello, world';

i:longint = 11058;

day:longint = 15;

hour:longint = 16;

minute:longint = 25;

begin

(* Вывести дату *)

printf ('Дата %s, %d %s, %d:%.2d'#$a,

[weekday, day, month, hour, minute]);

(* Перевод строки *)

putchar ($a);

(* Демонстрация различных комбинаций ширины поля и точности *)

printf ('>>%s<<'#$a, [str]);

printf ('>>%30s<<'#$a, [str]);

printf ('>>%-30s<<'#$a, [str]);

printf ('>>%30.5s<<'#$a, [str]);

printf ('>>%-30.5s<<'#$a, [str]);

putchar ($a);

(* Вывести число i в разных форматах *)

printf ('%d, %u, %o, %x, %X'#$a, [i, i, i, i, i]);

(* Вывести число пи с точностью 5 знаков после запятой *)

printf ('пи равно %.5f '#$a, [4 * arctan (1.0)]);

end.

Программа генерирует следующий вывод:

Дата Воскресенье, 15 Сентября, 16:25

>>Hello, world<<

>> Hello, world<<

>>Hello, world <<

>> Hello<<

>>Не11о <<

11058, 11058, 25462, 2b32, 2B32

пи равно 3.14159

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal