CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
printf, fprintf, sprintf - форматный вывод
Описание
Осуществляют форматную печать. fprintf - пишет литеры в поток fp. printf - пишет литеры в поток stdout. sprintf - пишет литеры в память buffer. Аргументы интерпретируются в соответствии со строкой формата, оканчивающейся 0. Строка формата является последовательностью литер со встроенными командами преобразования. Литеры, не являющиеся частью команд, подлежат выводу. Команды преобразования состоят из : '%'{flag}[field_width]['.'precision][l или L]conversion_char где : % Означает начало команды преобразования. Чтобы напечатать '%', надо использовать '%%'. flag characters Литеры режимов - - Означает необходимость выравнивания информации по левому краю поля вывода. + - Означает, что преобразование, включающее знак, должно начинаться с + или -. пробел (space) - Означает, что в случае преобразования поло- жительного результат начинается с пробела. Режим + перекрывает режим space. # - Имеет смысл для преобразования 'x' или 'X' и приводит к добавлению перед выводом сим- волов 0x или 0X. Для преобразования 'о' в вывод добавляется лидирующий ноль. В случае преобразований e, E, f, g, G всег- да появляется десятичная точка. Если это преобразование g или G, замыкающие 0 не будут опускаться. Field_width Ширина поля Десятичное целое, управляющее минимальным количест- вом печатаемых литер. Если действительное число литер меньше, чем field_width, это число допол- няется пробелами. Если строка цифр field_width на- чинается с 0, для дополнения используется 0. Если field_width есть литера *, действительное зна- чение длины поля вывода берется из следующего цело- го аргумента. Если field_width отрицательно, счита- ется, что задан флаг '-', а в качестве field_width берется абсолютное значение. Если действительное число литер превосходит field_width, это поле соот- ветственно увеличивается. Precision Точность Эта строка цифр, следующая за '.', определяет точ- ность преобразования. Если цифры за точкой отсутст- вуют, точность равна 0. Для преобразования целых точность есть минимальное количество выводимых цифр. Для 'g' и 'G'- это максимальное количество значащих цифр. Для 'e', 'E' и 'f'- это количество цифр после десятичной точки. Для 's' - это максимальное коли- чество литер в строке. Если точность включает лиди- рующий 0, тогда свободное поле вывода заполняется 0. l В случае спецификаций преобразования o, b, u, x, X, i, d используемый аргумент должен быть типа long, исключение составляет преобразование p, когда аргу- мент должен быть дальним указателем. Для других преобразований этот флаг игнорируется. L Этот флаг игнорируется. Conversion_char Преобразующая литера Это одна из литер d, i, o, b, u, x, X, f, e, E, g, G, c, s, p, n, %. Действие других литер неопре- делено. d,i,o,b,u,x,X Соответсвующий целый аргумент преобразуется в стро- ку цифр, причем, 'o' производит беззнаковое восьме- ричное, `b' - беззнаковое двоичное, 'u' - беззнако- вое десятичное, 'x' и 'X' - беззнаковое шестнадца- тиричное, 'i' и 'd' - десятичное со знаком. В слу- чае 'x' используются строчные цифры, в случае 'X' - заглавные. Если не специфицирована точность, используется умолчание 1. Если реально выводится меньше цифр, чем определено точностью, вывод до- полняется лидирующими пробелами. Если аргумент и точность равны 0, ничего не печатаются. c Младший значащий байт целого аргумента печатается как литера. e,E Аргумент типа double печатается, используя пред- ставление ([-]d.dddddd+-dd). Здесь перед десятичной точкой одна цифра и precision цифр после. Умолчание для precision равно 6. Если precision 0, десятичная точка не печатается. В экспоненте вместо 'e' будет использовано 'E', если задана литера 'E'. В экспо- ненте присутствуют как минимум две цифры. f Аргумент типа double печатается в виде строки [-]dd.dddd. Количество цифр после десятичной точки задается precision, которое по умолчанию равно 6. Если precision 0, дробная часть и десятичная точка не печатаются. g,G Аргумент типа double печатается c помощью формата 'f' или 'e' (или 'E', если задан 'G' формат) в зависимости от величины аргумента. 'e' используется, если экспонента < 3 или экспонента > precision. Precision задает количество значащих цифр; умолча- ние равно 6. Десятичная точка появляется, если предшествует цифре. Замыкающие 0 опускаются. n Аргумент является указателем на целое, в которое записывается количество цифр, напечатанных к этому моменту. Никакие литеры не печатаются и не преобра- зуются. p Аргумент является указателем, значение которого (адрес) печатается в виде segment:offset для даль- него указателя или в виде XXXX для ближнего указа- теля. s Аргумент является указателем на строку. Литеры печа- таются до замыкающего 0, или до исчерпания литер, ко- личество которых задано precision. Умолчание precision равно 32767. Замыкающий 0 не печатается. % Печатается литера '%'.
Использование
#include <stdio.h> int fprintf(FILE *fp,char *format,...); /* ANSI */ int printf(char *format,...); /* ANSI */ int sprintf(char *buffer,char *format,...); /* ANSI */
Возвращаемое значение
Возвращает количество напечатанных литер. Если име- ла место ошибка, возвращаемое значение отрицательно.
Пример
#include <stdio.h> #include <math.h> main() { char * msg="Целыми форматами являются:"; int number=10; double num=345.2356; printf("%s Hex: 0%x, Decimal:%d, Octal: %o\n", msg, number, number, number); printf("\n Точность плавающей точки для PI: %.2f, %.4f, %.8f\n", PI,PI,PI); printf("\n %.4f Экспоненциальный формат : %E\n", num,num); }
Рекомендация
Смотрите также scanf, vprintf, vsprintf, vfprintf.