Функция fprintf

Прототип функции 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) Если в строке есть символ пробела, он не игнорируется, а попадает в поток вывода.
# Используется вместе со спецификаторами ox или X специфицирующих значение отличное от нуля, 0x или 0X.
Используется вместе со спецификаторами eE и f, принудительно  выводит десятичную точку, даже, если у значения нет цифр в дробной части. По умолчанию, если нет цифр в дробной части, десятичная точка не отображается.
Используется с aAeEfFg или 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 имя:

Имя 0 [Дин ]
Имя 1 [Сэм ]
Имя 2 [Кастиэл]

Дополнительные примеры форматирования смотреть в описании функции prinf.

Автор: admin
Дата: 10.09.2012
Поделиться:

Комментарии

  1. Benn

    Benn

    На лицо любитель «Сверхъестественного» )

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.