printf
, , _printf_l
wprintf
_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). Стандартные дескрипторы потока, связанные с консолью, stdin
stdout
и 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_l
wscanf
_wscanf_l
sprintf
, , _sprintf_l
swprintf
, _swprintf_l
__swprintf_l
Функции vprintf
_set_output_format