Прототип функции 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
На лицо любитель «Бойцовского клуба» )