Пространства имён
Варианты
Действия

std::printf, std::fprintf, std::sprintf, std::snprintf

Материал из cppreference.com
< cpp‎ | io‎ | c


 
 
Библиотеки ввода / вывода
I / O манипуляторов
C-стиль I / O
Буферы
Оригинал:
Buffers
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
basic_streambuf
basic_filebuf
basic_stringbuf
strstreambuf(устарело)
Потоки
Оригинал:
Streams
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Абстракций
Оригинал:
Abstractions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ios_base
basic_ios
basic_istream
basic_ostream
basic_iostream
Файл I / O
Оригинал:
File I/O
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
basic_ifstream
basic_ofstream
basic_fstream
Струнный I / O
Оригинал:
String I/O
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
basic_istringstream
basic_ostringstream
basic_stringstream
Массив I / O
Оригинал:
Array I/O
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
istrstream(устарело)
ostrstream(устарело)
strstream(устарело)
Типы
Оригинал:
Types
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
streamoff
streamsize
fpos
Интерфейс Ошибка категории
Оригинал:
Error category interface
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
iostream_category(C++11)
io_errc(C++11)
 
C-стиль I / O
Функции
Оригинал:
Functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Доступ к файлам
Оригинал:
File access
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Прямой ввод / вывод
Оригинал:
Direct input/output
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
fread
fwrite
Неформатированная ввода / вывода
Оригинал:
Unformatted input/output
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Форматированный ввод / вывод
Оригинал:
Formatted input/output
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
scanf
fscanf
sscanf
vscanf
vfscanf
vsscanf
(C++11)
(C++11)
(C++11)
printf
fprintf
sprintf
snprintf



(C++11)
vprintf
vfprintf
vsprintf
vsnprintf



(C++11)
Позиционирование файла
Оригинал:
File positioning
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ftell
fgetpos
fseek
fsetpos
rewind
Обработка ошибок
Оригинал:
Error handling
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
clearerr
feof
ferror
perror
Операции с файлами
Оригинал:
Operations on files
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
remove
rename
tmpfile
tmpnam
 
Определено в заголовочном файле <cstdio>
int printf( const char* format, ... );
(1)
int fprintf( FILE* file, const char* format, ... );
(2)
int sprintf( char* buffer, const char* format, ... );
(3)
int snprintf( char* buffer, int buf_size, const char* format, ... );
(4) (начиная с C++11)

Извлекает данные из заданных источников, конвертирует их в строковое представление и записывает результат в различные приёмники.

1) Записывает результат в stdout.
2) Записывает результат в файловый поток stream.
3) Записывает результат в символьную строку buffer
4) Записывает результат в символьную строку buffer, не более buf_size - 1 входных символов. Результирующая символьная строка будет дополнена нулевым символом, если buf_size не равен нулю. Если buf_size равен нулю, ничего записано не будет, и buffer может быть нулевым указателем; возвращаемое значение (количество записанных байт) при этом вычисляется.

Содержание

[править] Параметры

stream - поток выходного файла, в который будет записан результат
buffer - указатель на символьную строку, в которую будет записан результат
buf_size - может быть записано не более buf_size - 1 символов плюс нулевой символ
format - указатель на завершающуюся нулем строку, определяющую, как интерпретировать данные

Строка форматирования состоит из печатных и пробельных символов (кроме %), без изменения выводимых в выходной поток, и спецификаторов форматирования:

  • символ-маркер %
  • (необязательно) один или несколько флагов, которые изменяют поведение форматирования:
  • -: выравнивание по левому краю внутри поля заданной ширины (по умолчанию по правому краю)
  • +: принудительная печать знака + с положительными значениями (по умолчанию знаком дополняются только отрицательные значения)
  • пробел: не дополненные знаком или отсутствующие численные значения дополняются слева пробелом. Игнорируется, если присутствует флаг +.
  • #: выполнится альтернативное форматирование. См. таблицу ниже для подробностей: если альтернативное форматирование не определено, поведение не определено (UB).
  • 0: при печати чисел в поле заданной ширины заполнение пустоты идёт нулями вместо пробелов. Для целых чисел флаг игнорируется, если задано количество выводимых знаков (точность). При печати не чисел вызывает неопределённое поведение (UB). Флаг игнорируется, если присутствует флаг -.
  • (необязательно) целое число, означающее минимальную ширину поля, или *. Свободное пространство в поле по умолчанию заполняется пробелами, выравнивание по правому краю. При использовании * ширина поля задаётся дополнительным аргументом типа int. Отрицательное значение ширины эквивалентно применению дополнительно флага -.

(Замечание: задаётся минимальная ширина поля, форматируемое значение никогда не обрезается.)

  • (необязательно) . с целым числом, * или просто .. Число определяет точность. При использовании * точность задаётся дополнительным аргументом типа int. Просто . устанавливает нулевую точность. См. таблицу ниже для подробностей о действии точности на вывод.
  • (необязательно)модификатор размера: определяет размер аргумента
  • спецификатор формата вывода

Доступны следующие спецификаторы формата:

Спецификатор Описание Флаг размера
hh h (нет) l ll j z t L
% выводит символ %. Полный спецификатор формата %%. N/A N/A N/A N/A N/A N/A N/A N/A N/A
c
выводит символ

Аргумент сначала приводится к unsigned char. Если использован флаг l, аргумент сначала конвертируется в строку, как при использовании %ls с аргументом типа wchar_t[2].

N/A N/A char wchar_t N/A N/A N/A N/A N/A
s
выводит строку

Аргумент должен быть указателем на первый элемент массива символов. Точность определяет максимальное количество выведенных байт. Если точностьне задана, выводит всё до первого встреченного нулевого символа (не включая его). Если использован флаг l, аргумент должен быть указателем на первый элемент массива wchar_t, который преобразуется в массив char, как при вызове wcrtomb.

N/A N/A char* wchar_t* N/A N/A N/A N/A N/A
d
i
форматирует знаковое целое как десятичное число в виде [-][0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

signed char
signed short
signed int
signed long
signed long long
intmax_t
size_t
ptrdiff_t
N/A
o
форматирует беззнаковое целое как восьмеричное число в виде [0-7]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: при необходимости точность повышается, чтобы добавить ноль слева. Таким образом, если форматированное значение и точность являются 0, выводится 0.

N/A
x
X
форматирует беззнаковое целое как шестнадцатеричное число в виде [0-F]*

Формат x использует буквы abcdef.
Формат X использует буквы ABCDEF.
Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: ненулевые значения выводятся с приставкой 0x или 0X соответственно.

N/A
u
форматирует беззнаковое целое как десятичное число в виде [0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
uintmax_t
N/A
f
F
форматирует число с плавающей запятой в виде [-][0-9]*\.[0-9]*

Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если число целое.
Форматирование бесконечности и NaN см. в примечаниях.

N/A N/A
double
double
N/A N/A N/A N/A
long double
e
E
форматирует число с плавающей запятой в экспоненициальной форме: AeB == A * pow (10, B)

Формат e использует букву e: AeB.
Формат E использует букву E: AEB.
Экспонента содержит не менее 2 цифр.
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если мантисса целая.
Форматирование бесконечности и NaN см. в примечаниях.

N/A N/A N/A N/A N/A N/A
a
A
преобразует 'число с плавающей точкой' в шестнадцатеричном показателем.
Оригинал:
converts floating-point number to the hexadecimal exponent notation.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля преобразования a [-]? 0x' h.hhh p D является used.
Оригинал:
For the a conversion style [-]0xh.hhhp±d is used.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля преобразования A [-]? 0X' h.hhh P D является used.
Оригинал:
For the A conversion style [-]0Xh.hhhP±d is used.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Первая цифра шестнадцатеричной является 0, если аргумент не является нормированным значением с плавающей точкой.
Оригинал:
The first hexadecimal digit is 0 if the argument is not a normalized floating point value.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если значение 0, показатель также 0.
Оригинал:
If the value is 0, the exponent is also 0.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
' Precision определяет минимальное количество цифр после десятичной точки характером.
Оригинал:
Precision specifies the minimum number of digits to appear after the decimal point character.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
По умолчанию точность достаточна для точного представления значения.
Оригинал:
The default precision is sufficient for exact representation of the value.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
В реализации альтернативных' символ десятичной точки написано, даже если нет следующих цифр.
Оригинал:
In the alternative implementation decimal point character is written even if no digits follow it.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля преобразования бесконечность и не-число см. примечания.
Оригинал:
For infinity and not-a-number conversion style see notes.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
N/A N/A N/A N/A N/A N/A
g
G
преобразует "число с плавающей точкой в десятичную или десятичной экспоненты обозначение в зависимости от величины и точности'.
Оригинал:
converts floating-point number to decimal or decimal exponent notation depending on the value and the precision.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля g преобразования преобразования в стиле e или f будет performed.
Оригинал:
For the g conversion style conversion with style e or f will be performed.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля G преобразования преобразования в стиле E или F будет performed.
Оригинал:
For the G conversion style conversion with style E or F will be performed.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пусть P равной точности, если отлична от нуля, 6 если точность не указана, или 1 если точность равна 0. Тогда, если преобразование в стиле E будет иметь показатель X
Оригинал:
Let P equal the precision if nonzero, 6 if the precision is not specified, or 1 if the precision is 0. Then, if a conversion with style E would have an exponent of X:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • если P> X ≥ -4, преобразование в стиле f или F и точность P - 1 - X.
    Оригинал:
    if P > X ≥ −4, the conversion is with style f or F and precision P − 1 − X.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • В противном случае преобразование в стиле e или E и точность P - 1.
    Оригинал:
    otherwise, the conversion is with style e or E and precision P − 1.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если' альтернативного представления просил нули удаляются, а также символ десятичной точки удаляются, если не дробная часть остается.
Оригинал:
Unless alternative representation is requested the trailing zeros are removed, also the decimal point character is removed if no fractional part is left.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Для стиля преобразования бесконечность и не-число см. примечания.
Оригинал:
For infinity and not-a-number conversion style see notes.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
N/A N/A N/A N/A N/A N/A
n
возвращает "число записанных символов до сих пор этого вызова функции.
Оригинал:
returns the number of characters written' so far by this call to the function.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
В результате' написаны на значение, на которую указывает аргумент.
Оригинал:
The result is written to the value pointed to by the argument.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Полная спецификация должна быть %n.
Оригинал:
The complete specification must be %n.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
N/A N/A int* N/A N/A N/A N/A N/A N/A
p writes an implementation defined character sequence defining a pointer. N/A N/A void* N/A N/A N/A N/A N/A N/A
'Примечание'
Оригинал:
Notes:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Плавающей точкой функции преобразования конвертировать бесконечности inf или infinity. Какой из них используется реализации defined.
Оригинал:
The floating point conversion functions convert infinity to inf or infinity. Which one is used is implementation defined.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Не-а-число преобразуется в nan или nan(char_sequence). Какой из них используется реализации defined.
Оригинал:
Not-a-number is converted to nan or nan(char_sequence). Which one is used is implementation defined.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Преобразования F, E, G, A выход INF, INFINITY, NAN вместо.
Оригинал:
The conversions F, E, G, A output INF, INFINITY, NAN instead.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


... - аргументы, определяющие данные для печати. Если тип какого-либо из аргументов не совпадает с указанным в format или аргументов меньше, чем указано в format, поведение не определено (undefined behaviour). Если агрументов больше, чем указано, неиспользованные агрументы будут вычислены и проигнорированы

[править] Возвращаемое значение

1-2) Количество записанных символов при успешной операции либо отрицательное значение при ошибке
3) Количество записанных символов (не включая последний нулевой) при успешной операции либо отрицательное значение при ошибке
4) Количество записанных символов (не включая последний нулевой) при успешной операции либо отрицательное значение при ошибке. Так как размер целевого буфера buf_size, успешную операцию (запись вместе с нулевым символом / бездействие) означают возвращаемые значения от 0 до buf_size - 1.

[править] Примечания

По стандарту POSIX при ошибке её код записывается в errno. Также, стандарт содержит дополнительные спецификаторы форматирования, в частности для перестановки аргументов.

Вызов std::snprintf с нулевым размером буфера и нулевым указателем на буфер может использоваться для определения требуемого размера буфера при печати:

const char *fmt = "sqrt(2) = %f";
int sz = std::snprintf(nullptr, 0, fmt, std::sqrt(2));
std::vector<char> buf(sz + 1); // sz символов + нулевой завершающий
std::snprintf(&buf[0], buf.size(), fmt, std::sqrt(2));

[править] Пример

#include <cstdio>
 
int main()
{
    std::printf("Strings:\n");
}

Вывод:

Strings:
    .     Hello.
    .Hello     .
    .     Hello.
Characters:     A %
Integers
Decimal:        1 2 000003 0  +4 4294967295
Hexadecimal:    5 a A 0x6
Octal:          12 012 04
Floating point
Rounding:       1.500000 2 1.30000000000000004440892098500626
Padding:        01.50 1.50  1.50
Scientific:     1.500000E+00 1.500000e+00
Hexadecimal:    0x1.8p+0 0X1.8P+0

[править] См. также

отпечатки отформатировать вывод stdout, поток файла или buffer
использованием переменного списка аргументов
Оригинал:
prints formatted output to stdout, a file stream or a buffer
using variable argument list
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
пишет символьная строка в файле поток
Оригинал:
writes a character string to a file stream
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
читается форматированный ввод из stdin, поток файл или буфер
Оригинал:
reads formatted input from stdin, a file stream or a buffer
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
C documentation for printf, fprintf, sprintf, snprintf