Поделиться через


printf, , _printf_lwprintf_wprintf_l

Выводит форматированные выходные данные в стандартный поток вывода. Доступны более безопасные версии этих функций; см. , wprintf_s_printf_s_l, _wprintf_s_l.printf_s

Синтаксис

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

Параметры

format
Формат объекта.

argument
Необязательные аргументы.

locale
Используемый языковой стандарт.

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

Возвращает число выведенных символов или отрицательное значение в случае ошибки. В противном format NULLслучае вызывается недопустимый обработчик параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, функция возвращает -1 и устанавливает errno в значение EINVAL. Если EOF (0xFFFF) обнаружена argument, функция возвращает -1.

Сведения о errno кодах ошибок и см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

Замечания

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

Функция wprintf — это версия printf с расширенными символами; format — строка расширенных символов. wprintf и printf ведут себя одинаково, если поток открыт в режиме ANSI. Функция printf на данный момент не поддерживает вывод данных в поток в кодировке Юникод.

Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

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

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

выводятся следующие выходные данные:

Line one
        Line two

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

Внимание

Убедитесь, что format не является строкой, определяемой пользователем.

Сопоставления подпрограмм универсального текста

Tchar.h рутина _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tprintf printf printf wprintf
_tprintf_l _printf_l _printf_l _wprintf_l

Требования

Маршрут Обязательный заголовок
printf, _printf_l <stdio.h>
wprintf, _wprintf_l <stdio.h> или <wchar.h>

Консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью, stdinstdoutи stderr, должны быть перенаправлены перед тем, как функции времени выполнения C могут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в разделе Совместимость.

Внимание

Начиная с Windows 10 версии 2004 (сборка 19041), printf семейство функций выводит точно представленные числа с плавающей запятой в соответствии с правилами IEEE 754 для округления. В предыдущих версиях Windows точно представленные числа с плавающей запятой, заканчивающиеся на "5", всегда округлялись. IEEE 754 утверждает, что они должны округлиться до ближайшей даже цифры (также известной как "Округление банкира"). Например, оба printf("%1.0f", 1.5) и printf("%1.0f", 2.5) должны округлиться до 2. Ранее 1,5 округляет до 2 и 2,5 округления до 3. Это изменение влияет только на точно представленные числа. Например, 2.35 (который при представлении в памяти приближается к 2,3500000000000000008) продолжает округляется до 2,4. Округление, выполняемое этими функциями, теперь также учитывает режим округления с плавающей запятой, заданный fesetround. Ранее округление всегда выбрало FE_TONEAREST поведение. Это изменение влияет только на программы, созданные с помощью Visual Studio 2019 версии 16.2 и более поздних версий. Чтобы использовать устаревшее поведение округления с плавающей запятой, свяжите со legacy_stdio_float_rounding.objссылкой.

Пример

// crt_printf.c
// This program uses the printf and wprintf functions
// to produce formatted output.

#include <stdio.h>

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

   // Display integers
   printf( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  "
           "Unsigned: %u\n",
           count, count, count, count );

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

   // Display in different radixes
   printf( "Digits 10 equal:\n   Hex: %i  "
           "Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

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

   // Display strings
   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"
           L"%25.4hs\n   %s%25.3ls\n",
           string, string, wstring, wstring);

   // Display real numbers
   printf("Real numbers:\n   %f %.2f %e %E\n",
          fp, fp, fp, fp );

   // Display pointer
   printf( "\nAddress as:   %p\n", &count);
}

Пример полученных результатов

Integer formats:
   Decimal: -9234  Justified: -009234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Digits 10 equal:
   Hex: 16  Octal: 8  Decimal: 10
Characters in field (1):
         h    h    w    w
Characters in field (2):
         h    h    w    w
Strings in field (1):
                 computer
                     comp
   Unicode                      Uni
Strings in field (2):
                 computer
                     comp
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FF3C

См. также

Синтаксис спецификации форматирования: printf и wprintf функции
Поддержка математических и плавающих точек
Потоковый ввод-вывод
Локаль
fopen, _wfopen
_fprintf_p, , _fprintf_p_l_fwprintf_p_fwprintf_p_l
scanf, , _scanf_lwscanf_wscanf_l
sprintf, , _sprintf_lswprintf, _swprintf_l__swprintf_l
Функции vprintf
_set_output_format