Функция printf и wprintf


Печатает отформатированный вывод в стандартном потоке вывода данных (функция библиотеки С и С++).

Синтаксис

int printf(
   const char *format [,
   argument]... 
);
int wprintf(
   const wchar_t *format [,
   argument]... 
);

Параметры

format

Управление форматом.

argument

Дополнительные параметры.

Возвращаемое значение

Возвращает число напечатанных символов или отрицательное значение, если происходит ошибка.

Замечания

Функция printf форматирует и печатает ряд символов и значений в стандартном потоке вывода данных - stdout. Если параметры следуют за строкой format, то форматирующая (format) строка должна содержать спецификации, которые определяют формат вывода для параметров. Функции printf и fprintf ведут себя тождественно за исключением того, что printf печатает выводимые данные stdout, а не в целевой тип файла (FILE).

Функция wprintf - широкосимвольная версия printf (для Unicode); format - широкосимвольная строка. Функции wprintf и printf во всем остальном ведут себя тождественно.

Унифицированно-текстовые стандартные отображения

Стандартный TCHAR.H

_UNICODE & _MBCS не определен

_MBCS определен _unicode определен
_tprintf printf printf wprintf

Параметр format состоит из обычных символов, последовательностей escape, и (если параметры следуют за параметром format), то спецификации формата. Обычные символы и последовательности escape копируются в stdout в порядке их поступления. Например, строка

printf("Line one\n\t\tLine two\n");

создает вывод

Line one
        Line two

Спецификации формата всегда начинаются со знака процента (%) и читается слева направо. Когда функция printf встречается с первой спецификацией формата (если она есть), то преобразует значение первого параметра после format и выводит его соответственно. Вторая спецификация формата заставляет второй параметр быть преобразованным и выведенным, и так далее. Если имеется больше параметров, чем есть их спецификаций, дополнительные параметры игнорируются. Результаты не определяются, если недостаточно параметров для всех спецификаций формата.

Поля спецификации формата: функции printf и wprintf

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

%[flags] [width] [.precision] [{h | l | I | I32 | I64}]type

Каждое поле спецификации формата - это единичный символ или число, показывающее конкретный вариант выбора формата. Самая простая спецификация формата содержит в себе только знак процента и символ типа - type (например, %s). Если знак процента сопровождается символом, у которого нет никакого значения как поля формата, символ копируется в stdout. Например, чтобы напечатать символ знака процента, используйте %%.

Дополнительные поля, которые показываются перед символом type, управляют другими аспектами форматирования, следующим образом:

type

Затребованный символ, который определяет, понимается ли связанный параметр как символ, строка или число (см. таблицу Поля  типов символов printf.

flags

Дополнительный символ или символы, которые управляют выравниванием вывода данных и печати знаков, пробелов, десятичных запятых, и октальных и шестнадцатеричных префиксов (см. таблицу Флажки символов). Более чем один флажок может применяться в спецификации формата.

width

Дополнительное число, которое указывает минимальное число выводимых символов (см. printf - Спецификация ширины).

precision

Дополнительное число, которое указывает максимальное число символов, напечатанных для всех или части полей вывода, или минимальное число цифр, напечатанных для целого значения (см.таблицу Как значения точности оказывают влияние на тип символа).

h | l | I | I32 | I64

Дополнительные префиксы для type, которые указывают размер параметра (см. таблицу Префиксы размера для printf и wprintf Спецификаторов типа формата).

Замечание по обеспечению безопасности! Убедитесь, что строки спецификации формата не определяемы пользователем. Например, рассмотрите программу, которая побуждает пользователя вводить свое имя и хранить вводимые данные в переменной строке, называемой name. Чтобы напечатать name, не делайте того, что ниже:
printf( name ); // Опасность!  Если имя будет содержать  "%s", то программа потерпит крах
Вместо этого сделайте вот это:
printf( "%s", name );

Демонстрационный пример

// crt_printf.c
/* Эта программа использует функции printf и wprintf * чтобы выполнить форматированный вывод данных.
 */

#include <stdio.h>

int main( void )
{
   char   ch = 'h', *string = "computer";
   int    count = -9234;
   double fp = 251.7366;
   wchar_t wch = L'w', *wstring = L"Unicode";

   /* Показывает целые числа. */
   printf( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  Unsigned: %u\n",
           count, count, count, count );

   printf( "Decimal %d as:\n   Hex: %Xh  C hex: 0x%x  Octal: %o\n",
            count, count, count, count );

   /* Показывает в различных основаниях системы счисления. */
   printf( "Digits 10 equal:\n   Hex: %i  Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

   /* Показывает символы. */

   printf("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch);
   wprintf(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch);

   /* Показывает строки. */

   printf("Strings in field (1):\n%25s\n%25.4hs\n   %S%25.3ls\n",
   string, string, wstring, wstring);
   wprintf(L"Strings in field (2):\n%25S\n%25.4hs\n   %s%25.3ls\n",
       string, string, wstring, wstring);

   /* Показывает действительные числа. */
   printf( "Real numbers:\n   %f %.2f %e %E\n", fp, fp, fp, fp );

   /* Показывает указатели. */
   printf( "\nAddress as:   %p\n", &count);

   /* Подсчет выведенных для печати символов. */
   printf( "\nDisplay to here:\n" );
   printf( "1234567890123456%n78901234567890\n", &count );
   printf( "   Number displayed: %d\n\n", count );
}

Вывод данных

Форматы целых чисел:
   Десятичный: -9234  Выравненный: -009234  Беззнаковый: 4294958062
Десятичный -9234 как:
   Hex(шестнадцатиричный): FFFFDBEEh  C hex: 0xffffdbee  Octal(восьмиричный): 37777755756
Цифра 10 эквивалентна:
   Hex: 16  Octal: 8  Decimal: 10
Символов в поле (1):
         h    h    w    w
Символов в поле (2):
         h    h    w    w
Строк в поле  (1):
                 computer
                     comp
   Unicode                      Uni
Строк в поле  (2):
                 computer
                     comp
   Unicode                      Uni
Действительные числа:
   251.736600 251.74 2.517366e+002 2.517366E+002

Адрес как:   0012FEE0

Вывод на экран здесь:
123456789012345678901234567890
   Число показанное на экране: 16

Смотри также

Процедуры поддержки плавающей запятой | Процедуры потоков ввода-вывода (I/O) | Локальные процедуры | функции fopen | fprintf | scanf | sprintf | vprintf | Процедуры времени исполнения программы и эквиваленты .NET Framework

Требования

Процедуры

Требуется заголовочный файл

Совместимость

printf <stdio.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP
wprintf <stdio.h> или <wchar.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP

Дополнительную информацию о совместимости см. в статье Совместимость в главе Введение.

Библиотеки

Все версии библиотек времени исполнения программы C.

Назад в оглавление
На главную страницу
В оглавление справки

Hosted by uCoz