CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
printf
PRINTF #include <stdio.h> int printf (format-string [, argument...]); char *format-string; строка управления форматом. Описание. Функция printf форматирует и печатает наборы символов и значений в выходной стандартный поток stdout. Строка формата сос- тоит из обычных символов, escape-последовательностей и, если за строкой формата следуют аргументы, еще и спецификации формата. Обычные символы и escape-последовательности просто копируются в stdout в порядке их появления. Например, строка printf ("Line one\n\t\tLine two\n"); выработает на выводе Line one Line two. Более подробно escape-последовательности описываются в гла- ве 2.2.4 руководства MSC Compiler Language Reference. Если за строкой формата следуют аргументы arguments, то эта строка также должна содержать спецификации формата, определяющие формат вывода этих аргументов. Спецификация формата всегда начи- нается с символа знака процента (%). Ниже о нем описывается под- робнее. Строка формата читается слева направо. Когда встречается первая спецификация формата (если она есть), то значение первого аргумента после строки формата преобразовывается и выводится сог- ласно заданной спецификации. Вторая спецификация формата вызывает преобразование и вывод второго аргумента и так далее, до конца строки формата. Если аргументов больше, чем спецификаций формата, то эти дополнительные аргументы игнорируются. Результат является неопределенным, если аргументов недостаточно для всех специфика- ций формата. Спецификация формата имеет следующую форму: %х[flags][wigth][.precision][{F:N:h:I}]type. Каждое поле в спецификации формата является отдельным сим- волом или числом, выражающим отдельную опцию формата. Символ type, появляющийся после последнего необязательного поля формата, определяет аргумент как символ, строку или число. (См. табл. R.1.). Простейшая спецификация формата содержит только символ знака процента и символ типа (например, %S). Необязательные поля управляют другими аспектами форматирования, как описывается ниже. ПОЛЕ ОПИСАНИЕ flags Включение вывода и печати знаков, пробелов, десятичных точек, восьмеричных и шестнадцатеричных префиксов. (См. табл. R.2.). width Минимальное число выводимых символов. precision Максимальное число символов, печатаемых на всем или части поля вывода; или минимальное число цифр для печати целых значений. (См. табл. R.3.). F, N Префиксы, позволяющие пользователю over- ride, по умолчанию, адресацию соглаше- ний моделей памяти. F Используется для малой модели для печати значения, объявленного far. N Используется для средней, большой и huge-моделей для near-значений. F и N могут быть использованы только с типами символов s и p, поскольку они уместны только с аргументами, представляющими указатель. h, l Предполагаемый размер аргумента: h используется в качестве префикса с целыми типами d, i, o, x, X для определения, что аргумент является short int. l используется в качестве префикса с типами d, i, o, x, X для обозначения, что аргумент является long int. Символ l используется также как префикс с типами e, E, f, g, G для определения, что аргумент является скорее double, чем float. Если за символом знака процента (%) следует символ, не обозначающий тип формата, то этот символ копируется в поток stdout. Например, для печати символа знака процента используется комбинация %%. Таблица R.1. Типы символов функции printf СИМВОЛ ТИП АРГУМЕНТА ФОРМАТ ВЫВОДА d целый целочисленный десятичный знаковый i целый целочисленный десятичный знаковый u целый беззнаковый целочисленный десятичный o целый беззнаковый восьмеричный целый x целый беззнаковый шестнадцате- ричный целый, использующий "abcdef" X целый беззнаковый шестнадцате- ричный целый, использующий "ABCDEF". f с плавающей знаковое значение, имеющее точкой форму [-]dddd.dddd, где dddd - одна или более десятичных цифр. Коли- чество цифр перед десятичной точкой зависит от величины числа, а количество цифр после десятичной точки зависит от требуемой точности. e с плавающей знаковое значение, имеющее точкой форму [-]d.dddde[sign]ddd, где d - десятичная цифра, dddd - одна или более десятичныхя цифр, ddd - ровно три десятичных цифры, и sign - либо "+", либо "-". E с плавающей идентично формату "e", за точкой исключением того, что вместо "e" вводится "E". g с плавающей знаковое значение, распеча- точкой тываемое в формате "f" или "e", и являющееся более компактным для выбранных значения и точности (как показано ниже). Формат "e" используется, только когда значение экспоненты меньше -4 или больше, чем precision. Ведущие нули отсекаются, и десятичная точка появляется тогда, когда за ней следует одна или несколько цифр. G с плавающей идентично формату "g", за точкой исключением того, что вместо "e" вводится экспонента "E" (если она необходима). c символьный отдельный символ. s строковый символы печатаются до первого нулевого символа '\o' или до достижения precision. n указатель на число символов успешно целый записывается в поток stream; это значение хранится в целом, адрес которого выбирается как аргумент. p far-указатель печать адреса, указываемо- го аргументом, в форме xxxx:yyyy, где xxxx является сегментом, yyyy является разветвлением, а цифры x и y являются шестнадцатеричными цифрами верхнего регистра (upper- case). %Np печатает только адрес разветвления yyyy. Поскольку %p предполагает указатель на far-значение, аргументы p-указателя могут быть сброшены к far в маленьких моделях программ. Таблица R.2. Символы flags функции printf FLAG(*) ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ - Смещение результата влево Смещение вправо внутри поля wigth + Присоединение знака к Знак "-" появ- выводимому значению, если ляется только оно имеет знаковый тип для отрицатель- ных знаковых значений blank К выводимому значению при- Без пробела (' ') соединяется ' ', если вы- водимое значение является знаковым и положительным; флаг "+" override флаг blank, если оба есть, и положительное знаковое значение выводится вместе со знаком # При использовании с форма- Без префикса тами o, x, X, флаг # при- соединяет к любому ненуле- вому выводимому значению, соответственно, 0, 0х, 0Х Когда флаг # используется Десятичная точ- в формате e, E, f, он ка появляется определяет наличие деся- только тогда, тичной точки в выводимом когда за ней значении идут цифры Когда флаг # используется Десятичная точ- в формате g, G, он опреде- ка появляется ляет наличие десятичной только тогда, точки в выводимом значении когда за ней и препятствует отсечению идут цифры ведущих нулей Ведущие нули отсекаются Флаг # игнорируется, при его использовании в форма- тах c, d, i, u, s Примечание. В формате спецификации может содержаться более, чем один flag. Width - неотрицательное десятичное целое, контролирующее минимальное число напечатанных символов. Если число символов в значении вывода меньше, чем в width, слева и справа добавляются пробелы (в зависимости от того, где определен флаг "-"), пока ми- нимальная ширина не будет достигнута. Если к width присоединяется 0, то 0 будут добавляться до тех пор, пока не будет достигнут ми- нимум width. (Это не применяется для чисел, смещенных влево). Спецификация width не требует отсечения значения; если чис- ло символов выводимого значения больше чем определено в width, или не задано в нем, все значения символов распечатываются (под- лежат спецификации precision). В спецификации width может быть звездочка (*), когда вместо значения подставляется соответствующий ему аргумент из списка ар- гументов. Аргумент width должен предшедствовать соответствующему значению. Спецификация precision является неотрицательным десятичным целым, которому предшедствует точка (.), определяющая количество печатаемых символов или же число десятичных мест. В отличии от спецификации width, спецификация precision требует отсечения выводимого значения или, в случае значения с плавающей точкой, его округления. В случае подстановки аргумента из списка аргументов в спецификации precision может быть звез- дочка (*). В списке аргументов аргумент precision предшедствует форматируемому значению. Объяснение значений precision, в зависи- мости от типа type и случая, когда precision пропущено, предс- тавлено в таблице R.3. Таблица R.3. Как тип type влияет на значение precision в функции printf ТИП ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ d Precision определяет Если precision i минимальное число печатаемых равна 0 или про- u цифр. Если число цифр в пущена, или если o аргументе меньше, чем появляется точка x размер precision, слева (.) без идущих X перед выводимым значением за ней цифр, то добавляются нули. Если число precision уста- цифр не превосходит размер навливается рав- precision, значение не ной 1 отсекается e Precision определяет число Precision по E цифр, печатаемых после умолчанию равна f десятичной точки. Последняя 6; если она рав- печатаемая цифра округляется на 0 или перед ней появляется точка (.) без следуемых за ней цифр, тогда десятичная точка не печатается g Precision определяет Печатаются все G максимальное число важных важные (много- (многозначных) печатаемых значные) цифры символов c Не происходит никакого Печать символа действия s Precision определяет макси- Печать символов, мальное число печатаемых пока не встре- символов тится нулевой Символы, превышающие размер символ precision, не печатаются Возвращаемое значение. Эта функция возвращает количество напечатанных символов. См. также fprintf, scanf, sprintf, vfprintf, vprintf, vsprintf. Пример: main () /* форматирование и печать различных данных */ { char ch = 'h', *string = "computer"; int count = 234, *ptr, hex = 0x10, oct = 010, dec = 10; double fp = 251.7366; printf("%d %+d %06d %X %x %o\n\n", count, count, count, count, count, count); printf("1234567890123%n45678901234567890\n\n", &count); printf("Value of count should be 13; count = %d\n\n", count); printf("%10c%5c\n\n", ch, ch); printf("%25s\n%25.4s\n\n", string, string); printf("%f %.2f %e %E\n\n", fp, fp, fp, fp); printf("%i %i %i\n\n", hex, oct, dec); ptr = &count; printf("%Np %p %Fp\n", ptr, (int far *) ptr, (int far *)ptr); } Тогда на выводе получится следующее: 234 +234 000234 EA ea 352 123456789012345678901234567890 Value of count should be 13; count = 13; h h computer comp 251.736600 251.74 2.517366e+002 2.517366E+002 16 8 10 127A 1328:127A 1328:127A. PUTC-PUTCHAR #include <stdio.h> int putc (c, stream); записывает символ в поток stream int c; записываемый символ FILE *stream; указатель на структуру FILE int putchar(c); записывает символ в <stdout> int c; записываемый символ Описание. Процедура putc записывает отдельный символ "с" в текущую позицию выходного потока stream. Процедура putchar идентична про- цедуре putc(c, stdout). Возвращаемое значение. Эти обе процедуры возвращают записанный символ. В случае ошибки возвращается значение EOF. Так как значение EOF может быть воспринято как целая величина, поэтому для проверки места возникновения ошибки применяется функция ferror. См. также fputc, fputchar, getc, getchar. Замечание: Процедуры putc и putchar идентичны fputc и fputchar, но они являются макро, а не функциями. Пример: #include <stdio.h> FILE *stream; char buffer[81]; int i, ch; . . . /* следующий оператор позволяет записать буфер в поток */ for (i = 0; (i < 81) && ((ch = putc(buffer[i], stream)) != EOF) ;) ++i; /* Замечание: Поскольку тело утверждения пусто, операция записи происходит в выражении проверки. */ PUTCH #include <conio.h> требуется только для объявления функции void putch(c) int c; выводимый символ Описание. Функция putch записывает символ "c" прямо на консоль. Возвращаемое значение. Возвращаемого значения нет. См.также cprintf, getch, getche. Пример: #include <conio.h> /* в следующем примере показано, как может быть определена функ- ция getche посредством использования функций putch и getch.*/ int getche() { int ch; ch=getch(); putch(ch); return(ch); }