logo search
Подбельский Фомин_Программирование на языке СИ_

Функция форматированного вывода.

Функция форматированного вывода. Достаточно часто для вывода информации из ЭВМ в программах используется функция printf( ). Она переводит данные из внутреннего кода в символьное представление и выводит полученные изображения символов результатов на экран дисплея. При этом у программиста имеется возможность форматировать данные, т.е. влиять на их представление на экране дисплея.

Возможность форматирования условно отмечена в самом имени функции с помощью литеры f в конце ее названия (print formatted).

Оператор вызова функции printf( ) можно представить так:

printf (форматная_строка, список_аргументов);

Форматная строка ограничена двойными кавычками (см. строковые константы, §1.2) и может включать произвольный текст, управляющие символы и спецификации преобразования данных. Список аргументов (с предшествующей запятой) может отсутствовать. Именно такой вариант использован в классической первой программе на языке Си [1, 2]:

Директива #include <stdio.h> включает в текст программы описание (прототип) библиотечной функции printf( ) (Если удалить из текста программы эту препроцессорную директиву, то появятся сообщения об ошибках и исполнимый код программы не будет создан. Среди параметров функции printf( ) есть в этом примере только форматная строка (список аргументов отсутствует). В форматной строке два управляющих символа '\n' - "перевод строки". Между ними текст, который выводится на экран дисплея:

Первый символ '\n' обеспечивает вывод этой фразы с начала новой строки. Второй управляющий символ '\n' переведет курсор к началу следующей строки, где и начнется вывод других сообщений (не связанных с программой) на экран дисплея.

Итак, произвольный текст (не спецификации преобразования и не управляющие символы) непосредственно без изменений выводится на экран. Управляющие символы (перевод строки, табуляция и т.д.) позволяют влиять на размещение выводимой информации на экране дисплея.

Спецификации преобразования данных предназначены для управления формой внешнего представления значений аргументов функции printf( ). Обобщенный формат спецификации преобразования имеет вид: %флажки ширина_поля. точность модификатор спецификатор

Среди элементов спецификации преобразования обязательными являются только два - символ '% ' и спецификатор.

В задачах вычислительного характера этой главы будем использовать спецификаторы:

d - для целых десятичных чисел (тип int);

u - для целых десятичных чисел без знака (тип unsigned);

f-для вещественных чисел в форме с фиксированной точкой (типы float и double);

е - для вещественных чисел в форме с плавающей точкой (с мантиссой и порядком) - для типов double и float.

В список аргументов функции printf( ) включают объекты, значения которых должны быть выведены из программы. Это выражения и их частные случаи - переменные и константы. Количество аргументов и их типы должны соответствовать последовательности спецификаций преобразования в форматной строке. Например, если вещественная переменная summa имеет значение 2102.3, то при таком вызове функции

на экран с новой строки будет выведено:

.

После выполнения операторов

на экране получится такая строка:

Здесь обратите внимание на управляющий символ 't' (табуляция). С его помощью выводимые значения в строке результата отделены друг от друга.

Для вывода числовых значений в спецификации преобразования весьма полезны " ширина_поля" и "точность".

Ширина_поля - целое положительное число, определяющее длину (в позициях на экране) представления выводимого значения.

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

Пример с теми же переменными:

Результат на экране:

В качестве модификаторов в спецификации преобразования используются символы:

h - для вывода значений типа short int;

l - для вывода значений типа long;

L - для вывода значений типа long double.

Примеры на использование модификаторов здесь приводить не будем, но они нам понадобятся в следующей программе, где будут продемонстрированы их возможности.

Хотя в разделе, посвященном символам и строковым константам (§1.2), упоминалось о возможностях записи управляющих последовательностей и эскейп-последовательностей внутри строк, остановимся еще раз на этом вопросе в связи с форматной строкой. При необходимости вывести на экран (на печать) парные кавычки или апострофы их представляют с помощью соответствующих последовательностей: \" или '\', т.е. заменяют парами литер. Обратная косая черта '\' для однократного вывода на экран должна быть дважды включена в форматную строку.

При необходимости вывести символ % его в форматную строку включают дважды: % %.