Прототип функции fprintf:
int fprintf( FILE * stream, const char * format, ... );
Заголовочный файл
Название | Язык |
---|---|
stdio.h | С |
cstdio | С++ |
Описание
Функция fprintf
выполняет форматированный вывод в поток. Записывает в указанный поток последовательность символов в формате, указанном аргументом format
. После параметра format
, функция ожидает, по крайней мере, многие дополнительные аргументы, как указано в прототипе.
Параметры:
- stream
Указатель на объект типаFILE
, который связан с потоком. - format
Cи-строка, содержащая текст, который будет выведен на поток. Опционально, строка может содержать встроенные метки форматирования, которые заменяются значениями, указанными в последующих дополнительных аргументах и отформатированы требуемым образом.
Форматируемые теги должны следовать следующему формату записи:
Ниже приведены спецификаторы форматирования потоков ввода/вывода:
Спецификатор | Описание | Пример |
---|---|---|
c |
Символ | d |
d или i |
Знаковое десятичное число. | 111 |
e |
Экспоненциальная форма записи чисел (мантисса/экспонента) с использованием символа e . |
3.9265e+2 |
E |
Экспоненциальная форма записи чисел (мантисса/экспонента) с использованием символа E . |
3.9265E+2 |
f |
Десятичное значение с плавающей точкой. | 392.65 |
g |
Используется для обозначения короткого %e или %f |
392.65 |
G |
Используется для обозначения короткого %E или %f |
392.65 |
o |
Восьмеричная система счисления | 610 |
s |
Строка символов. | sample |
u |
Использовать беззнаковое целое десятичное значение. | 7235 |
x |
Использовать беззнаковые шестнадцатеричные значения | 7fa |
X |
Шестнадцатеричные целые без знака (прописные буквы) | 7FA |
p |
Указатель на адрес | B800:0000 |
n |
Ничего не печатается. Аргумент должен быть указателем на знаковое целое, где хранится количество символов, написанных до сих пор. | |
% |
Следующий символ, который должен быть записан в поток. |
Форматирующие теги могут содержать флаги, ширину, точность и модификаторы, которые являются необязательными:
Флаг | Описание |
---|---|
— | Выравнивание по левому краю выделенного поля. По умолчанию стоит правостороннее выравнивание в выделенном поле. |
+ | Использовать знаки плюс или минус для вывода значений. По умолчанию выводится только знак минус, если значение отрицательное. |
(space) | Если в строке есть символ пробела, он не игнорируется, а попадает в поток вывода. |
# | Используется вместе со спецификаторами o , x или X специфицирующих значение отличное от нуля, 0x или 0X .Используется вместе со спецификаторами e , E и f , принудительно выводит десятичную точку, даже, если у значения нет цифр в дробной части. По умолчанию, если нет цифр в дробной части, десятичная точка не отображается.Используется с a , A , e , E , f , F , g или G результат такой же, как и со спецификаторами е или Е , но нули не удаляются. |
0 | Левая часть после числа заполняется нулями (0) вместо пробелов, если ширина поля больше числа. |
ширина | Описание |
---|---|
number | Минимальное количество символов для печати. Если значение для печати короче, чем это число, пустые места заполняются пробелами. Значение не обрезается, даже если оно больше number . |
* | Ширина не указана в строке формата, но в качестве дополнительного аргумента целое значение предшествующего аргумента, который должен быть отформатирован. |
.точность | Описание |
---|---|
.number | Для спецификаторов целых чисел d, i, o, u, x, X : указывает минимальное количество цифр. Если значение, короче, чем это число, пустое место заполняется нулями. Значение не обрезается, даже если number короче. Точность 0 означает, что нет символа записанного для значения 0.Для спецификаторов е , Е и F : это количество цифр, которое будет напечатано после де-десятичной точки.Для спецификаторов g и G : это максимальное количество значащих цифр для печати. Для S — это максимальное количество символов для печати. По умолчанию все символы выводятся пока не встретится нулевой символ.Для c : этот параметр не имеет значения.При отсутствии этого параметра, точность по умолчанию равна 1. Если срок указан без явного значения для точности, значение 0. |
.* | Точность не указана в строке формата, но в качестве дополнительного аргумента целое значение предшествующего аргумента, который должен быть отформатирован. |
длинна | Описание |
---|---|
h | Короткий int или беззнаковый короткий int (применяется только к целым спецификаторам: i , d , o , u , x и X ). |
l | Длинный int или длинный беззнаковый int , применяется к целым спецификаторам (i , d , o , u , x и X ), а также к широким символам или строкам с широкими символами, для спецификаторов c и s . |
Дополнительные аргументы
- В зависимости от формата строки, функция может принимать дополнительные аргументы, каждый из которых содержит одно значение. Вместо каждого
%-тега
, указанного в параметреformat
,в поток вывода будет вставлено значение соответствующего аргумента. Количество дополнительных аргументов должно соответствовать количеству%-тегов
.
Возвращаемое значение
В случае успеха, возвращается общее число записанных символов.
В случае неудачи, возвращается отрицательное число.
Пример: исходный код программы
/* fprintf example */ #include <stdio.h> int main () { FILE * pFile; int n; char name [100]; pFile = fopen ("myfile.txt","w"); for (n=0 ; n<3 ; n++) { puts ("please, enter a name: "); gets (name); fprintf (pFile, "Name %d [%-10.10s]n",n,name); } fclose (pFile); return 0; }
Пример работы программы
В этом примере программа 3 раза запрашивает имя пользователя, а затем записывает их в файл name.txt
каждый из них в соответствии с фиксированной длиной (всего 19 символов + строка).
Используется два тега форматирования:
%D
: десятичное число
%-10.10s
: выровненное влево (-), не менее десяти символов (10), максимум десять символов (0,10), String (s).
Предполагая, что мы ввели Дин, Сэм и Кастиэль. Итак name.txt
должен содержать 3 имя:
Имя 1 [Сэм ]
Имя 2 [Кастиэл]
Дополнительные примеры форматирования смотреть в описании функции prinf
.
Комментарии
Benn
На лицо любитель «Сверхъестественного» )
admin
На лицо любитель «Бойцовского клуба» )