Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

printf

printf


Функция            Производит форматированный вывод в stdout.

Синтаксис          #include<stdio.h>
                   int printf(const char *format [,argument, ...]);


Файл, содержащий   stdio.h
прототип

Описание           printf получает   набор  аргументов,  применяет  к
                   каждому соответствующую  спецификацию  формата  из
                   строки format,  и выводит форматированные данные в
                   stdout.  Число аргументов  должно  соответствовать
                   числу спецификаций формата в format.

                              Строка формата.

                   Строка формата,  представленная  в  каждом  вызове
                   функций  семейства ...printf,  управляет тем,  как
                   каждая   из   функций    будет    преобразовывать,
                   форматировать   и  печатать  свои  аргументы.  Для
                   формата должно быть достаточно  аргументов,  иначе
                   результаты могут быть непредвиденными,  и,  скорее
                   всего,  неверными.  Лишние  аргументы   (если   их
                   количество больше,  чем требуется в формате) будут
                   игнорироваться.

                   Строка формата - это символьная строка,  состоящая
                   из   двух   типов  объектов  -  просто  символы  и
                   спецификации преобразования.

                   - Простые  символы   переносятся   в   вывод   без
                     изменений.

                   - Спецификации   преобразования   применяются  для
                     форматирования.

                           Спецификации формата.

                   Спецификации формата   для    функций    семейства
                   ...printf имеют следующую форму:

                    %[флаги] [ширина] [.точность] [F|N|h|l|L] type

                   Каждая спецификация  начинается с символа процента
                   (%). После процента следуют признаки в порядке:

                   - необязательная    последовательность     [flags]
                     символов-флагов;

                   - необязательная спецификация [width] ширины;

                   - необязательная спецификация [.prec] точности;

                   - необязательный  модификатор [F|N|h|l|L] входного
                     размера;

                   - символ типа преобразования [type].

                        Необязательные компоненты строки формата.

                   Далее описаны    основные    правила    управления
                   форматом,    включая    необязательные    символы,
                   спецификации и модификации для форматной строки.

-----------------T---------------------------------------------------
 Символ или      ¦  Как они управляют форматом
 спецификация    ¦
-----------------+---------------------------------------------------
 flags (флажки)  ¦ выравнивание вывода, знак числа, десятичная
                 ¦ точка, хвостовые нули, восьмеричные и десятичные
                 ¦ префиксы.
                 ¦
 width (ширина)  ¦ максимальное число печатаемых символов, включая
                 ¦ пробелы и нули.
                 ¦
 precision       ¦ максимальное число печатаемых символов; для целых
 (точность)      ¦ чисел максимальное число цифр.
                 ¦
 size (размер)   ¦ отвергает размер аргумента по умолчанию
                 ¦ (N- ближний указатель, F- дальний указатель,
                 ¦  h- короткое целое, l- длинное целое, L - long
                 ¦                                           double).
-----------------+---------------------------------------------------


               Символы преобразования для семейства функций
                                ...printf.

                   В следующей   таблице    дается    список    типов
                   преобразований,  входной  тип аргумента и выходной
                   тип после преобразования.

                   Информация, представленная   в   данной    таблице
                   предполагает, что в формате отсутствуют кроме типа
                   преобразования,  все   остальные   характеристики:
                   флажки,  ширина,  точность, размер. Чтобы увидеть,
                   как  влияет  на   вывод   добавления   к   формату
                   какоголибо необязательного спецификатора, смотрите
                   таблицу, следующую за данной.

--------------T------------T-----------------------------------------
 Символ       ¦ Входной    ¦ Выходной аргумент
преобразования¦ аргумент   ¦
--------------+------------+-----------------------------------------

                           числовые данные
--------------T------------T-----------------------------------------
     d        ¦  целое     ¦ целое десятичное со знаком
     i        ¦  целое     ¦ целое десятичное со знаком
     o        ¦  целое     ¦ целое восьмеричное без знака
     u        ¦  целое     ¦ целое десятичное без знака
     x        ¦  целое     ¦ целое шестнадцатеричное без знака
              ¦            ¦ (с буквами a, b, c, d, e, f)
     X        ¦  целое     ¦ целое шестнадцатеричное без знака
              ¦            ¦ (с буквами A, B, C, D, E, F).
     f        ¦с плавающей ¦ значение со знаком в форме [-]dddd.
              ¦  точкой    ¦ dddd
     e        ¦с плавающей ¦ значение со знаком в форме [-]d.dddd
              ¦  точкой    ¦ e[+/-]ddd
     g        ¦с плавающей ¦ значение со знаком либо в форме f, либо
              ¦  точкой    ¦ в форме e, с данным значением и точнос-
              ¦            ¦ тью. Хвостовые нули и десятичная точка
              ¦            ¦ печатаются только при необходимости
     E        ¦с плавающей ¦ так же, как в случае e, только с буквой
              ¦  точкой    ¦ E для обозначения степени
     G        ¦с плавающей ¦ так же, как в случае g, только с буквой
              ¦  точкой    ¦ E для обозначения степени
--------------+------------+-----------------------------------------

                          Символьные данные.
--------------T------------T-----------------------------------------
     C        ¦ символьное ¦ один символ
     S        ¦ указатель  ¦ печатает символы до тех пор, пока не
              ¦ на строку  ¦ встретится нулевое окончание, либо не
              ¦            ¦ будет достигнута точность.
     %        ¦ нет символа¦ печатается только знак %.
--------------+------------+-----------------------------------------

                              Указатели
--------------T------------T-----------------------------------------
     n        ¦ указатель  ¦ сохраняется (по адресу, указанному во
              ¦ на целое   ¦ входном аргументе) кол-во только что за-
              ¦            ¦ писанных символов.
     P        ¦ указатель  ¦ печатает входной аргумент,как указатель;
              ¦            ¦ дальние указатели печатаются, как
              ¦            ¦ XXXX:YYYY, ближние указатели печатаются,
              ¦            ¦ как YYYY (только смещение).
--------------+------------+-----------------------------------------

                                Соглашения.

                   В нижеследующей   таблице   перечислены  некоторые
                   соглашения, сопровождающие данные спецификации.

------------T--------------------------------------------------------
  Символы   ¦     Соглашения
------------+--------------------------------------------------------
 e или E    ¦ аргумент преобразуется в соответствии с шаблоном:
            ¦ [-]d.ddd...e[+/-]ddd, где
            ¦ - одна цифра предшествует десятичной точке;
            ¦ - число цифр после десятичной точки равно точности;
            ¦ - степень всегда содержит три цифры.
    f       ¦ аргумент преобразуется в десятичную форму в соответст-
            ¦ вии с шаблоном [-]ddd.ddd..., где число десятичных
            ¦ цифр после запятой равно точности (если дана ненулевая
            ¦ точность).
 g или G    ¦ аргумент печатается по принципу e, E или f, с точнос-
            ¦ тью, обозначающей число значащих цифр.
            ¦ Хвостовые нули удаляются, десятичная точка ставится
            ¦ только при необходимости.
            ¦ аргумент печатается по принципу e или f (с некоторыми
            ¦ ограничениями), если символ преобразования g; и по
            ¦ принципу E, если символ преобразования G.
            ¦ Принцип e используется только в том случае, если экспо-
            ¦ нента, полученная в результате либо а) больше, чем точ-
            ¦ ность; б) меньше чем -4.
 x или X    ¦ Для преобразований типа x - в выводе будут буквы a, b,
            ¦ c, d, e.
            ¦ Для преобразований типа X - в выводе будут буквы A, B,
            ¦ C, D, E.
------------+---------------------------------------------------------

                   Замечание. Неопределенные  значения  с   плавающей
                   точкой  печатаются как +INF или -INF.  Не числа по
                   IEEE печатаются как +NAN или -NAN.

                             Символы - флаги.

                   Символы - флажки это минус(-),  плюс(+), диез(#) и
                   пусто(  );  Они могут появляться в любом порядке и
                   комбинации.

-----------T---------------------------------------------------------
 Флаг      ¦      Что это означает
-----------+---------------------------------------------------------
   -       ¦ Левое выравнивание результата, пробелы остаются справа.
           ¦ Если не задан, результат выравнивается справа, заполня-
           ¦ ется пробелами или нулями слева.
   +       ¦ Знаковое преобразование - результат всегда начинается со
           ¦ знака (+) или (-).
   пусто   ¦ Если значение неотрицательно, вывод начинается с пробе-
           ¦ ла вместо плюса; отрицательные значения всегда начина-
           ¦ ются со знака минус.
   #       ¦ Специфицирует, что преобразуемый аргумент используется в
           ¦ "альтернативной" форме. Смотрите следующую таблицу.
-----------+---------------------------------------------------------

                   Примечание. Знак плюс имеет приоритет над пробелом
                   в обоих случаях.

                   Альтернативная форма.

                   Если флаг  #  используется   вместе   с   символом
                   преобразования,   при   конвертировании  аргумента
                   (arg) это даст следующий результат:

------------------T--------------------------------------------------
 Символ           ¦    Как # влияет на результат
 преобразования   ¦
------------------+--------------------------------------------------
c, s, d, i, u     ¦ Не оказывает влияния.
      0           ¦ 0 предшествует ненулевому arg
    x или X       ¦ 0x (или 0X) предшествует arg
  e, E или f      ¦ Результат всегда будет содержать десятичную точ-
                  ¦ ку, даже если за точкой не следует никаких цифр.
                  ¦ Обычно, десятичная точка появляется в результате,
                  ¦ только если за ней следует цифра.
   g или G        ¦ Аналогично e или E, с дополнением, что хвостовые
                  ¦ нули не удаляются.
------------------+--------------------------------------------------

                   Спецификация ширины.

                   Спецификация ширины    устанавливает   минимальную
                   ширину поля для выводимого значения.

                   Ширина задается одним из двух способов:

                   - непосредственно, с помощью строки десятичных
                     цифр;

                   - или косвенно с помощью знаков (*).

                   Если вы используете звездочку (*) для спецификации
                   ширины,  следующий  аргумент  в   вызове   функции
                   (который должен быть целым) определяет минимальную
                   ширину  выводного  поля.
                   
                   Не существующая или недостаточная ширина поля ни в
                   коем  случае  не  приведет  к усечению поля.  Если
                   результат шире,  чем объявленная ширина поля, поле
                   будет просто продолжено до необходимой ширины.

--------------T------------------------------------------------------
 Спецификация ¦       Как это влияет на ширину вывода
 ширины       ¦
--------------+------------------------------------------------------
   n          ¦ Печатаются по крайней мере n символов. Если выводи-
              ¦ мое значение меньше, чем n символов, вывод заполня-
              ¦ ется пробелами (выравнивание справа, если задан флаг
              ¦ "-", в противном случае - левое выравнивание).
   0n         ¦ Печатается по крайней мере n символов. Если выводное
              ¦ значение содержит менее n символов, оно заполняется
              ¦ слева нулями.
   *          ¦ Спецификация ширины ставится в списке аргументов
              ¦ перед соответствующим аргументом.
--------------+------------------------------------------------------

                          Спецификация точности.

                   Спецификация точности всегда  начинается  с  точки
                   (.),  отделяющей ее от предшествующей спецификации
                   ширины.  Затем спецификация точности также,  как и
                   ширины,  задается либо непосредственно,  с помощью
                   строки десятичных цифр,  либо косвенно - с помощью
                   знака   звездочки   (*).   Если  для  спецификации
                   точности  используется  звездочка  (*),  следующий
                   аргумент  в  вызове  функции  (обязательно  целый)
                   определяет точность.

                   Если вы используете звездочки для задания точности
                   или ширины,  или для обеих спецификаций,  аргумент
                   должен      следовать      непосредственно      за
                   соответствующим спецификатором.

---------------T-----------------------------------------------------
 Спецификация  ¦        Как это влияет на вывод
 точности      ¦
---------------+-----------------------------------------------------
 (не дана)     ¦ Точность устанавливается по умолчанию (стандартно
               ¦ =1 для типов d, i, o, u, x, X;
               ¦ =6 для типов e, E, f;
               ¦ = все значащие цифры для типов g, G;
               ¦ = печать первого нулевого символа для типа S;
               ¦   не влияет на тип c)
    .0         ¦ Для типов d, i, o, u, x точность устанавливается по
               ¦ умолчанию.
               ¦ Для типов e, E, f десятичная точка не печатается.
    .n         ¦ Печатаются n символов или n десятичных знаков; если
               ¦ выводимое значение содержит больше n символов, оно
               ¦ может быть усечено или округлено. (Случится это или
               ¦ нет, зависит от символьного типа).
     *         ¦ Спецификация точности задается в списке аргументов,
               ¦ причем она предшествует значению форматируемого ар-
               ¦ гумента.
---------------+-----------------------------------------------------

                   Замечание. Если   указана   нулевая   точность,  и
                   спецификатор формата для целого значения (т.е.  d,
                   i,  o,  u, x), и печатаемое значение равно 0, то в
                   этом случае не будут  выводится  цифровые  символы
                   (т.е. поле будет пустое).

---------------T-----------------------------------------------------
 Символ        ¦ Как спецификация точности влияет на преобразование
преобразования ¦
---------------+-----------------------------------------------------
     d         ¦ .n показывает, что будет напечатано по крайней мере
     i         ¦ n цифр. Если выводимый аргумент имеет менее n цифр,
     o         ¦ свободные места в выводе забиваются слева нулями.
     u         ¦ Если же выводимый аргумент имеет больше n цифр, вы-
     x         ¦ ходное значение не усекается.
     X         ¦
               ¦
     e         ¦ .n показывает, что после десятичной точки будет на-
     E         ¦ печатано n символов, причем последняя цифра округ-
     f         ¦ ляется.
               ¦
     g         ¦ .n определяет, что будет напечатано максимально n
               ¦ значащих цифр.
     G         ¦
               ¦
     c         ¦ .n не имеет влияния на вывод
               ¦
     s         ¦ .n определяет, что будет напечатано не больше, чем
               ¦  n символов.
---------------+-----------------------------------------------------

                       Модификатор входного размера.

                   Символ - модификатор входного размера (F,  N, h, l
                   или   L)   дает   размер   последующего   входного
                   аргумента:

                   F = дальний указатель;
                   N = ближний указатель;
                   h =  короткое целое;
                   l = длинное целое;
                   L = длинное двойной точности;

                   Модификаторы входного размера (F,  N,  h,  l и  L)
                   влияют  на  то,  каким  образом  функции ...printf
                   интерпретируют   тип    данных    соответствующего
                   входного   аргумента   arg.  Модификаторы  F  и  N
                   применяются только к тем входным  аргументам  arg,
                   которые  представляют  собой  указатели (%p,  %s и
                   %n).  Модификаторы h, l и L применяются к числовым
                   аргументам (целые и с плавающей точкой).

                   Оба модификатора  F  и  N  интерпретируют  входной
                   аргумент arg.  Обычно,  для преобразований %p, %s,
                   или  %n  аргумент arg - это указатель стандартного
                   размера  для  соответствующей  модели  памяти.   F
                   означает:   "интерпретировать   arg,  как  дальний
                   указатель".  N означает: "интепретировать arg, как
                   ближний указатель".

                   Модификаторы h, l и L отвергают стандартный размер
                   числовых  данных  входных  аргументов:   l   и   L
                   применяется к целым типам данных (d,  i,  o, u, x,
                   X) и типам данных с плавающей точкой (e, E, f, g и
                   G),  в  то  время как h применяется только к целым
                   данным.  Ни h,  ни l-  модификаторы  не  оказывают
                   никакого   влияния   на   типы  символов(c,s)  или
                   указателей(p,n).

------------------T--------------------------------------------------
 Модификаторы     ¦       Как  интерпретируется аргумент
входного размера  ¦
------------------+--------------------------------------------------
      F           ¦ аргумент arg читается, как дальний указатель.
      N           ¦ аргумент arg читается, как ближний указатель.
                  ¦ в сверх-больших моделях памяти N  не может ис-
                  ¦ пользоваться ни с каким типом преобразований.
      h           ¦ для типов преобразований d, i, o, u, x, X аргумент
                  ¦ arg интерпретируется, как короткое целое;
      l           ¦ для типов преобразований d, i, o, u, x, X аргумент
                  ¦ интерпретируется, как длинное целое;
                  ¦ для типов преобразований e, E, f, g, G аргумент ин-
                  ¦ терпретируется как число двойной точности.
      L           ¦ интерпретирует arg как длинное с двойной точ-
                  ¦ ность для типов преобразований e, E, f, g, G.
------------------+--------------------------------------------------


Возвращаемое       Каждая функция возвращает количество выводимых
значение           байт. В случае ошибки printf возвращает EOF.

Переносимость      printf поддерживается на системах UNIX и определена
                   в стандарте   Кернигана  и  Ритчи.  Поддерживается
                   стандартом  ANSI  C.  Функция  не   совместима   с
                   Windows.

Смотрите также     cprintf, ecvt, fprintf, fread, fscanf, putc, puts,
                   putw, scanf, sprintf, vprintf, vsprintf.

Пример:

#define I 555
#define R 5.5

int main(void)
{
   int i, j, k, l;
   char buf[7];
   char *prefix = &buf;
   char tp[20];
   printf("prefix   6d   6o   8x   10.2e   10.2f\n");
   strcpy(prefix, "%");
   for (i=0; i<2; i++){
     for (j=0; j<2; j++)
      for (k=0; k<2; k++)
       for (l=0; l<2; l++)
       {
         if (i==0)  strcat(prefix,"-");
         if (j==0)  strcat(prefix,"+");
         if (k==0)  strcat(prefix,"%");
         if (l==0)  strcat(prefix,"0");
         printf("%5s !",prefix);
         strcpy(tp, prefix);
         strcat(tp, "6d !");
         printf(tp, I);
         strcpy(tp,"");
         strcpy(tp, prefix);
         strcat(tp, "6o !");
         printf(tp, I);
         strcpy(tp,"");
         strcpy(tp,prefix);
         stpcat(tp, "8x !");
         printf(tp,I);
         stpcry(tp,"");
         stpcry(tp, prefix);
         strcat(tp, "10.2e !");
         printf(tp, R);
         strcpy(tp, prefix);
         strcat(tp, "10.2f !");
         printf(tp,R);
         printf(" \n");
         stpcry(prefix, "%");
        }
   }
}

prefix     6d    6o      8x        10.2e       10.2f
%-+#0 !+00555 !01053  !0x0022b  !+5.50e+000 !+000005.50 !
 %-+# !+555   !01053  !0x22b    !+5.50e+000 !+5.50      !
 %-+0 !+00555 !01053  !000022b  !+5.50e+000 !+000005.50 !
  %-+ !+555   !1053   !22b      !+5.50e+000 !+5.50      !
 %-#0 !000555 !001053 !0x00022b !05.50e+000 !0000005.50 !
  %-# !555    !01053  !0x22b    !5.50e+000  !5.50       !
  %-0 !000555 !001053 !0000022b !05.50e+000 !0000005.50 !
   %- !555    !1053   !22b      !5.50e+000  !5.50       !
 %+#0 !+00555 ! 01053 ! 0x0022b !+5.50e+000 !+000005.50 !
  %+# !  +555 ! 01053 !   0x22b !+5.50e+000 !     +5.50 !
  %+0 !+00555 ! 01053 ! 000022b !+5.50e+000 !+000005.50 !
   %+ !  +555 !  1053 !     22b !+5.50e+000 !     +5.50 !
  %#0 !000555 !001053 !0x00022b !05.50e+000 !0000005.50 !
   %# !   555 ! 01053 !   0x22b ! 5.50e+000 !      5.50 !
   %0 !000555 !001053 !0000022b !05.50e+000 !0000005.50 !
    % !   555 !  1053 !     22b ! 5.50e+000 !      5.50 !

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог