printf()
#include <stdio.h> int printf(const char *format, ...);
Описание
Записывает в стандартный поток stdout значения аргументов из заданного списка аргументов в соответствии со строкой форматирования
Функция printf() записывает в стандартный поток stdout значения аргументов из заданного списка аргументов в соответствии со строкой форматирования, адресуемой параметром format. Строка форматирования состоит из элементов двух типов. К элементам первого типа относятся символы, которые выводятся на экран. Элементы второго типа содержат команды форматирования, которые определяют способ отображения аргументов. Команда форматирования начинается с символа процента, за которым следует код формата. Количество аргументов должно в точности совпадать с количеством команд форматирования, причем совпадение обязательно и в порядке их следования. Например, при вызове следующей функции printf() на экране будет отображено "Hi с 10 there!". printf("Hi %c %d %s", 'с', 10, "there!") Если заданных аргументов меньше, чем команд форматирования, результат будет не определен. Если аргументов больше, чем команд форматирования, оставшиеся "без пары" аргументы отбрасываются. Команды форматирования перечислены ниже.
Функция printf() возвращает число реально выведенных символов. Отрицательное значение возврата свидетельствует об ошибке. Команды формата могут иметь модификаторы, которые задают ширину поля, точность и признак выравнивания по левому краю. Целое значение, расположенное между знаком % и командой форматирования, выполняет роль спецификатора минимальной ширины поля. Наличие этого спецификатора приведет к тому, что результат будет заполнен пробелами или нулями, чтобы гарантированно обеспечить для выводимого значения заданную минимальную длину. Если выводимое значение (строка или число) больше этого минимума, оно будет выведено полностью, несмотря на превышение минимума. По умолчанию в качестве заполнителя используется пробел. Для заполнения нулями нужно поместить 0 перед спецификатором ширины поля. Например, строка форматирования %05d дополнит выводимое число нулями (их будет меньше 5), чтобы общая длина была равной 5 символам. Точное значение модификатора точности зависит от кода формата, к которому он применяется. Чтобы добавить модификатор точности, поставьте за спецификатором ширины поля десятичную точку, а после нее — значение спецификации точности. Для форматов а, А, е, Е, f и F модификатор точности определяет число выводимых десятичных знаков. Например, строка форматирования %10.4f обеспечит вывод числа, ширина которого составит не меньше десяти символов, с четырьмя десятичными знаками. Если модификатор точности применяется к коду формата g или G, то он определяет максимальное число выводимых значащих цифр. Применительно к целым, модификатор точности задает минимальное количество выводимых цифр. При необходимости будут добавлены начальные нули. Если модификатор точности применяется к строкам, число, следующее за точкой, задает максимальную длину поля. Например, строка форматирования %5.7s отобразит строку длиной не менее пяти, но не более семи символов. Если выводимая строка окажется длиннее максимальной длины поля, конечные символы будут отсечены. По умолчанию все выводимые значения выравниваются по правому краю: если ширина поля больше выводимого значения, оно будет выровнено по правому краю поля. Чтобы установить выравнивание по левому краю, поставьте знак "минус" сразу после знака %. Например, строка форматирования %-10.2f обеспечит выравнивание вещественного числа (с двумя десятичными знаками в 10-символьном поле) по левому краю. Существуют два модификатора команд форматирования, которые позволяют функции printf() отображать короткие и длинные целые. Эти модификаторы могут применяться к спецификаторам типа d, i, о, и, х и X. Модификатор l уведомляет о длинном формате значения. Например, строка %ld означает, что выводится длинное целое. Модификатор h сообщает о коротком формате. Следовательно, строка %hu означает, что выводимое данное имеет тип short unsigned integer. Если вы используете современный компилятор, который поддерживает добавленные в 1995 году средства работы с символами широкого формата (двухбайтовыми символами), то можете задействовать модификатор l применительно к спецификатору с, чтобы уведомить об использовании двухбайтовых символов. Модификатор l можно также использовать с командой формата s для вывода строки двухбайтовых символов. Модификатор l можно также поставить перед командами форматирования вещественных чисел а, А, е, Е, f, F, g и G. В этом случае он уведомит о выводе значения типа long double. Команда n сохраняет в целой переменной, указатель на которую задан в списке аргументов, число символов, которые были записаны в выходной поток к моменту обнаружения спецификатора n. Например, следующий фрагмент программы выведет число 14 после строки "This is a test". int i; printf("This is a test%n", &i); printf("%d", i); Чтобы обозначить, что соответствующий аргумент указывает на длинное целое, к спецификатору n можно применить модификатор l. Для указания на короткое целое примените к спецификатору n модификатор h. Символ # имеет специальное значение при использовании с некоторыми кодами формата функции printf(). Символ #, поставленный перед кодами a, A, g, G, f, е и Е, гарантирует присутствие десятичной точки даже в случае, если десятичных цифр нет. Если поставить символ # перед кодами формата х и X, то шестнадцатеричное число будет выведено с префиксом 0х. Если поставить символ # перед кодами формата о и О, то восьмеричное число будет выведено с префиксом O. Символ # нельзя применять ни к каким другим спецификаторам формата. Спецификаторы минимальной ширины поля и точности могут задаваться не константами, а аргументами функции printf(). Для этого в строке форматирования используется символ "звездочка" (*). При сканировании строки форматирования функции printf() каждый символ * будет сопоставляться с соответствующим аргументом в порядке их следования. Модификаторы формата, добавленные к функции printf() стандартом С99В версии С99 добавлено несколько модификаторов формата для использования в функции printf(): hh, ll, j, z и t. Модификатор hh можно применять к спецификаторам d, i, о, и, х, X и n. Он означает, что соответствующий аргумент является значением типа signed char или unsigned char, а в случае спецификатора n — указателем на переменную типа signed char. Модификатор ll также можно применять к спецификаторам d, i, о, и, х, X и n. Он означает, что соответствующий аргумент является значением типа signed long long int или unsigned long long int, а в случае спецификатора n — указателем на переменную типа long long int. Модификатор формата j, который применяется к спецификаторам d, i, о, и, х, X и n, означает, что соответствующий аргумент имеет тип intmax_t или uintmax_t. Эти типы объявлены в заголовке <stdint.h> и служат для хранения целых самой большой длины. Модификатор формата z, который применяется к спецификаторам d, i, о, и, х, X и n, означает, что соответствующий аргумент имеет тип size_t. Этот тип объявлен в заголовке <stddef.h> и служит для хранения результата операции sizeof. Модификатор формата t, который применяется к спецификаторам d, i, о, и, х, X и n, означает, что соответствующий аргумент имеет тип ptrdiff_t. Этот тип объявлен в заголовке <stddef.h> и служит для хранения значения разности между двумя указателями. В версии С99 также разрешено применять модификатор l к спецификаторам вещественных типов а, А, е, Е, f, F, g и G, но он не работает. |
Нет комментариев. Оставить комментарий: |