Две функции: PRINTF для вывода и SCANF для ввода (следу-ющий раздел) позволяют преобразовывать численные величины всимвольное представлEние и обратно. Они также позволяют ге-нерировать и интерпретировать форматные строки. Мы уже всюдув предыдущих главах неформально использовали функцию PRINTF;здесь приводится более полное и точное описание. Функция PRINTF(CONTROL, ARG1, ARG2, ...) преобразует, определяет формат и печатает свои аргументы встандартный вывод под управлением строки CONTROL. Управляю-щая строка содержит два типа объектов: обычные символы, ко-торые просто копируются в выходной поток, и спецификациипреобразований, каждая из которых вызывает преобразование ипечать очередного аргумента PRINTF. Каждая спецификация преобразования начинается с символа% и заканчивается символом преобразования. Между % и симво-лом преобразования могут находиться:- знак минус, который указывает о выравнивании преобразован- ного аргумента по левому краю его поля.- Строка цифр, задающая минимальную ширину поля. Преобразо- ванное число будет напечатано в поле по крайней мере этой ширины, а если необходимо, то и в более широком. Если пре- образованный аргумент имеет меньше символов, чем указанная ширина поля, то он будет дополнен слева (или справа, если было указано выравнивание по левому краю)заполняющими сим- волами до этой ширины. Заполняющим символом обычно являет- ся пробел, а если ширина поля указывается с лидирующим ну- лем, то этим символом будет нуль (лидирующий нуль в данном случае не означает восьмеричной ширины поля).- Точка, которая отделяет ширину поля от следующей строки цифр.- Строка цифр (точность), которая указывает максимальное число символов строки, которые должны быть напечатаны, или число печатаемых справа от десятичной точки цифр для пере- менных типа FLOAT или DOUBLE.- Модификатор длины L, который указывает, что соответствую- щий элемент данных имеет тип LONG, а не INT. Ниже приводятся символы преобразования и их смысл: D - аргумент преобразуется к десятичному виду.O - Аргумент преобразуется в беззнаковую восьмеричную форму (без лидирующего нуля).X - Аргумент преобразуется в беззнаковую шестнадцатеричную форму (без лидирующих 0X).U - Аргумент преобразуется в беззнаковую десятичную форму.C - Аргумент рассматривается как отдельный символ.S - Аргумент является строкой: символы строки печатаются до тех пор, пока не будет достигнут нулевой символ или не бу- дет напечатано количество символов, указанное в специфика- ции точности.E - Аргумент, рассматриваемый как переменная типа FLOAT или DOUBLE, преобразуется в десятичную форму в виде [-]M.NNNNNNE[+-]XX, где длина строки из N определяется указанной точностью. Точность по умолчанию равна 6.F - Аргумент, рассматриваемый как переменная типа FLOAT или DOUBLE, преобразуется в десятичную форму в виде [-]MMM.NNNNN, где длина строки из N определяется указанной точностью. Точность по умолчанию равна 6. отметим, что эта точность не определяет количество печатаемых в формате F значащих цифр. G - Используется или формат %E или %F, какой короче; незна- чащие нули не печатаются.Если идущий за % символ не является символом преобразования,то печатается сам этот символ; следовательно,символ % можнонапечатать, указав %%. Большинство из форматных преобразований очевидно и былопроиллюстрировано в предыдущих главах. Единственным исключе-нием является то, как точность взаимодействует со строками.Следующая таблица демонстрирует влияние задания различныхспецификаций на печать "HELLO, WORLD" (12 символов). Мы по-местили двоеточия вокруг каждого поля для того, чтобы вымогли видеть его протяженность. :%10S: :HELLO, WORLD::%10-S: :HELLO, WORLD::%20S: : HELLO, WORLD::%-20S: :HELLO, WORLD ::%20.10S: : HELLO, WOR::%-20.10S: :HELLO, WOR ::%.10S: :HELLO, WOR: Предостережение: PRINTF использует свой первый аргументдля определения числа последующих аргументов и их типов. Ес-ли количество аргументов окажется недостаточным или они бу-дут иметь несоответственные типы, то возникнет путаница и выполучите бессмысленные результаты. Упражнение 7-1 -------------- Напишите программу, которая будет печатать разумным об-разом произвольный ввод. Как минимум она должна печататьнеграфические символы в восьмеричном или шестнадцатеричномвиде (в соответствии с принятыми у вас обычаями) и склады-вать длинные строки.