Наиболее универсальной стандартной функцией, обеспечивающей запись в выходной поток stdout, является функция printf(). Она производит вывод на экран дисплея строк, отдельных символов и чисел в различных форматах.
Приведем прототип функции printf(): int printf( char *format [,argument]... );
Первый аргумент функции содержит указатель на управляющую строку, которая может состоять из:
Непосредственно выводимые символы и управляющие символы помещаются в выходной поток без изменения.
Если управляющая строка содержит спецификаторы формата, то каждому спецификатору должен соответствовать один аргумент, следующий за управляющей строкой. Аргументы представляют собой переменные или константы, которые преобразуются согласно соответствующих им спецификаторов формата и затем также помещаются в выходной поток.
Различные спецификаторы формата перечислены в таблице 13.2:
Спецификатор формата Тип данных
%d, %i целое десятичное число
%s текстовая строка
%c один символ
Таблица 13.2 Спецификаторы формата функции printf().
В более общем случае, в спецификаторе формата между символом '%' и символом, определяющим тип преобразования можно разместить флаги и префиксы типов: % [флаг] [ширина] [.точность] [префикс типа] символ преобразования
Флаги приведены в таблице 13.3, а префиксы типов в таблице 13.4.
Поле [ширина] задает мимнимальную ширину поля, используемую при печати строки или числа. Если это число или строка не помещаются в поле целиком, то ширина поля увеличивается.
Поле [.точность] определяет для чисел количество отображаемых после запятой цифр, а для строк - максимальное число символов в строке. Флаг Значение - выравнивание по левой границе + перед числом помещается его знак пробел (' ') перед данными помещается пробел
Таблица 13.3 Флаги. Префикс типа Значение F дальний указатель N ближний указатель h короткое целое l, L длинное целое
Таблица 13.4 Префиксы типов.
Функция printf() возвращает число напечатанных ею символов или в случае ошибки - отрицательную величину.
Использование различных спецификаторов формата демонстрируется следующим примером: // при использовании printf также необходим файл stdio.h #include <stdio.h> void main(void) { int char_count; char ptr[] = "строка"; printf("\n%23d \n%e \n%.3E \n%f \n%+g \n%-23G \n\n", 1111, 0.01, 0.01, 0.01, 0.01, 0.0000001); printf("%s%n", ptr, &char_count); printf("\n\nПредыдущая функция вывела %d символов.\n\n", char_count); printf("Это %s, расположенная по адресу %Lp.\n\a", ptr, ptr); }