printf – вывод форматированной строки в стандартный поток вывода.
Синтаксис:
#include < stdio.h >
int printf (const char *format, ...);
Аргументы:
format – указатель на строку c описанием формата.
Возвращаемое значение:
При успешном завершении вывода возвращается количество выведенных символов.
При шибке возвращается отрицательное число.
Описание:
Функция printf выводит в стандартный поток вывода строку отформатированную в соответствии с правилами, указанными в строке, на которую указывает аргумент format.
Правила задаются набором трех типов директив:
1. Обычные символы (кроме '%' и '\'), которые выводятся без изменения;
2. Спецификаторы формата;
3. Специальные сиволы.
Спецификаторы формата
Каждый спецификатор формата начинается с символа '%' и имеет следующий формат:
%[флаги][ширина][точность][модификаторы][тип преобразования]
Флаги
Спецификатор формата может иметь 0 или более [флагов], которые могут принемать значенияуказанные в таблице 1.
Таблица 1.
Флаг
|
Назначение флага
|
- (дефис)
|
Результат преобразования выравнивается по левому краю (по умолчанию - по правому краю)
|
+
|
Перед положительными числами выводится знак '+', а перед отрицательыыми - знак '-' (по умолчанию выводится только знак '-' перед отрицательыми числами)
|
' ' (пробел)
|
Если не указан модификатор '+', то перед положительными числами, на месте знака числа, будет выводиться пробел.
|
#
|
Использовать альтернативную форму представления выводимого числа. При выводе чисел в шестнадцатеричном формате (преобразователь 'х' или 'Х') перед числом будет указываться 0х или 0Х соответственно. При выводе чисел в восьмеричном формате (преобразователь 'о')перед числом будет указываться 0. При выводе чисел с плавующей точкой (преобразователи e, E, f, g и G) всегда будет содержаться десятичная точка (по умолчанию десятичная точка выводится только при ненулевой дробной части). При использовании преобразователей g и G хвостовые нули не будут удаляться (по умолчанию удаляются).
|
0
|
Если не указан флаг '-', то слева от выводимого числа будут выведены символы '0' для подгона числа к указанной ширене. Если для преобразователей d, i, o, x или X указана точность, то флаг 0 игнорируется.
|
Спецификатор [флаги] можно не указывать.
Ширина
Спецификатор [ширина] задаёт минимальный размер выводимого числа в символах. Если количество символов в выводимом числе меньше указанной минимальной ширины, то недостоющее количество символов заполняется нулями или пробелами слева или справа в зависимости от указанных флагов. Ширина указывается либо целым числом, либо символом * с последующим указанием имени переменной типа int, содержащей значение ширины, перед аргументом к которому он относится. Если аргумент имеет отрицательное значение, то он эквивалентен соответствующему положительному значению с флагом "-".
Спецификатор [ширина] можно не указывать.
Точность
Действия спецификатора [точность] зависит от типа выводимого числа:
- Для типов d, i, o, u, x, X определяет минимальное число выводимых цифр. Если количество выводимых цифр в числе меньше, чем указано в спецификаторе [точность], то выводимое число будет дополнено нулями слева. Например, если при выводе числа 126 указать точность 4, то на экран будет выведено число 0126
- Для типов a, A, e, E, f, F определяет количество выводимых цифр после запятой. Если в выводимом числе количество значимых цифр после запятой меньше указанной точности, то недостающие символы выводятся нулями справа от числа. Если больше, то лишние цифры не выводятся. Например, если при выводе числа 126.345 указать точность 2, будет выведено на экран число 126.34, а если указать точность 5, то на экран будет выведено число 126.34500.
- Для типов g и G определяет максимальное выводимое число цифр. Например, если при выводе числа 126.345 указать точность 4, будет выведено на экран число 126.3. Если при выводе числа 1242679.23 указать точность 3, будет выведено на экран число 1.24е+06.
Точность указывается в виде символа точка, за которым следует десятичное число или символ "*", с последующим указанием имени переменной типа int, содержащей значение точности, перед аргументом к которому он относится.
Спецификатор [точность] можно не указывать.
Модификаторы
Спецификатор [модификаторы] определяет размер выводимых данных (char, short, long, longlong). Спецификаторы используются для вывода чисел типа: char, short int, long int, long long int, long double или для явного преобразования выводимых данных. Например, если имеется переменная типа int, а необходимо вывести ее как short int. Доступные модификаторы приведены в таблице 2.
Таблица 2.
Модификатор
|
Назначение модификатора
|
h
|
Для вывода числа типа short int или unsigned short int. Или для явного преобразования при выводе целочисленного числа к типу short int или unsigned short int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
|
hh
|
Для вывода числа типа char или unsigned char. Или для явного преобразования при выводе целочисленного числа к типу char или unsigned char. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
|
l
|
Для вывода числа типа long int или unsigned long int. Или для явного преобразования при выводе целочисленного числа к типу long int или unsigned long int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
|
ll
|
Для вывода числа типа long long int или unsigned long long int. Или для явного преобразования при выводе целочисленного числа к типу long long int или unsigned long long int. Используется совместно с типами преобразования:d, i, o, u, x и X, n.
|
L
|
Для вывода числа типа long double. Или для явного преобразования при выводе числа c плавающей точкой к типу long double. Используется совместно с типами преобразования:e, E, f, g и G.
|
Тип преобразования
Спецификатор [тип преобразования] определяет как надо итерпритировать и выводить число, например как знаковое целочисленное в десятичном виде, или беззнаковое целочисленное в шестнадцатеричном, или как число с плавающей точкой и так далее. Перечень доступных преобразований и их описание указано в таблице 3.
Таблица 3.
Тип преобразования
|
Назначение преобразования
|
d,i
|
Вывод целого числа со знаком в десятичной систем счисления. По умолчанию выводится число размером sizeof( int ), с правым выравниванием, указанием знака только для отрицательных чисел.
|
u
|
Вывод целого числа без знака в десятичной систем счисления. По умолчанию выводится число размером sizeof( int ), с правым выравниванием.
|
o
|
Вывод целого числа без знака в восьмеричной систем счисления. По умолчанию выводится число размером sizeof( int ), с правым выравниванием.
|
x, X
|
Вывод целого числа без знака в шестнадцетеричной систем счисления. Причем для преобразования x используются символы abcdef, а для X - символы ABCDEF. По умолчанию выводится число размером sizeof( int ), с правым выравниванием.
|
f, F
|
Вывод числа с плавающей точкой в виде [-]dddd.ddd. По умолчанию выводится число с точностью 6, если число по модулю меньше единицы, то пред десятично точкой выводится ноль, знак указывается только для отрицательных чисел, с правым выравниванием. Размер по умолчанию sizeof( double ).
|
e, E
|
Вывод числа с плавающей точкой в экспоненциальной форме записи, в виде [-]dddd.ddde±dd, причем для модификатора e используется символ e, а для модификатора E - символ E. По умолчанию выводится число с точностью 6, если число по модулю меньше еденицы, то пред десятично точкой выводится ноль, знак указывается только для отрицательных чисел, с правым выравниванием. После символа "e" (или "E") всегда выводится две цифры (они равны 0, если аргумент равен 0).
|
g, G
|
Вывод числа с плавающей точкой в форме зависищей от величины цисла. Например число 345.26 будет выведено как 345.26, а число 1344527.434 как 1.34453e+06. По умолчанию выводится 6 значащих цифр числа с округлением, если число по модулю меньше еденицы, то пред десятично точкой выводится ноль, знак указывается только для отрицательных чисел, с правым выравниванием.
|
a, A
|
Вывод числа с плавающей точкой в шестнадцатеричном фомрате, в экспоненциальной форме записи. Например число 137.434 будет выведено как 0x1.12de353f7ced9p+7. Экспонента обозначается символом p. Для модификатора a используется символ p, а для модификатора A - символ P.По умолчанию знак указывается только для отрицательных чисел, выравнивание - правое.
|
с
|
Вывод символа, соответстветсвующего числу указанному в аргументе функции. По умолчанию число приводится к типу unsigned char.
|
s
|
Вывод строки, на которую ссылается указатель в аргументе функции printf. Строка выводится пока не будет встречен символ конец строки (/0). По умолчанию строка должна обозначаться как char*. Если указан модификатор l, то строка интерпитируется как wchar_t*. Для функции wprintf строка по умолчанию обрабатывается как wchar_t*.
|
S
|
Аналогичен преобразованию s с модификатором l (ls).
|
p
|
Вывод указателя. Результат ввода зависит от архитектуры и используемого компилятрора. Например, на 16 битной платформе MS-DOS вывод будет иметь вид типа FFAB:1402, а на 32-битной платформе с плоской адресацией - 00FC0120.
|
n
|
Запись по адресу, указанному в аргументе функции, количества выведенных символов функцией printf до встречи преобразователя %n. При обработке преобразователя %n никакого вывода символов не производится.
|
Специальные символы
Для форматирования вывода в функции printf предусмотрен набор специальных симовлов. Перечень специальных символов приведен в таблице 4.
Таблица 4.
Код символа
|
Назначение символа
|
\a
|
Издается звуковой сигнал.
|
\b
|
Удаляет последний выведенный символ.
|
\f
|
Перевод строки. Новый сомвол будет напечатан на новой строке, на позиции, следующей за последним напечатанным символом на предидущей строке.
|
\n
|
Перевод строки. Следующий сомвол будет напечатан с начала новой строки.
|
\r
|
Возврат на начало строки.
|
\t
|
Табуляция по горизонтали.
|
\v
|
Вертикальная табуляция.
|
\\
|
Вывод обратного слеша.
|
\"
|
Вывод кавычек.
|
\% или %%
|
Вывод процента.
|
\num
|
Вывод символа по его коду. Например при выводе \123 будет напечатан симовл 'S'.
|
Пример:
#include //Для printf,fflush
int main (void)
{
printf ("1. Вывод простой строки\n");
printf ("\n2. Вывод целых чисел\n");
printf ("2.1 Вывод числа 123 с форматом по умолчанию:\n");
{ int d1=123;
printf ("%d\n",d1);
}
printf ("\n2.2 Вывод чисел c выравниванием по правому краю:\n");
{ int d1=123, d2=42, d3=1543;
printf ("%6d\n%6d\n%6d\n",d1,d2,d3);
}
printf ("\n2.3 Вывод чисел c выравниванием по левому краю:\n");
{ int d1=123, d2=42, d3=1543;
printf ("%-6d\n%-6d\n%-6d\n",d1,d2,d3);
}
printf ("\n2.4 Вывод числа с выводом 0 в недостающих символах:\n");
{ int d1=-123;
printf ("%06d\n",d1);
}
printf ("\n2.5 Вывод числа 123 с заданной шириной 6 символов:\n");
{ int d1=123;
printf ("%6d\n",d1);
}
printf ("\n2.6 Вывод числа 123 с заданной точностью 6 символов:\n");
{ int d1=123;
printf ("%.6d\n",d1);
}
printf ("\n2.7 Вывод числа типа char:\n");
{ char d1=123;
printf ("%hhd\n",d1);
}
printf ("\n2.8 Вывод числа типа short int:\n");
{ short int d1=123;
printf ("%hd\n",d1);
}
printf ("\n2.9 Вывод числа типа long int:\n");
{ long int d1=123;
printf ("%ld\n",d1);
}
printf ("\n2.10 Вывод числа типа long long int:\n");
{ long long int d1=123;
printf ("%lld\n",d1);
}
printf ("\n2.11 Вывод целого без знакового числа:\n");
{ unsigned int d1=123;
printf ("%u\n",d1);
}
printf ("\n2.12 Вывод целого числа в восьмеричном формате:\n");
{ unsigned int d1=123;
printf ("%o\n",d1);
}
printf ("\n2.13 Вывод целого числа в шестнадцатеричном формате:\n");
{ unsigned int d1=123;
printf ("%x\n",d1);
}
printf ("\n2.14 Вывод целого числа в шестнадцатеричном формате:\n");
{ unsigned int d1=123;
printf ("%#x\n",d1);
}
printf ("\n3. Вывод чисел c плавающей точкой\n");
printf ("3.1 Вывод числа 123.456 с форматом по умолчанию:\n");
{ double d1=123.456;
printf ("%f\n",d1);
}
printf ("\n3.2 Вывод числа 123.456 с точностью 2:\n");
{ double d1=123.456;
printf ("%.2f\n",d1);
}
printf ("\n3.3 Вывод числа 123.456 в экспоненциальной форме:\n");
{ double d1=123.456;
printf ("%e\n",d1);
}
printf ("\n3.4 Использование преобразователя g:\n");
{ double d1=123.4567, d2=1234567.34567;
printf ("%g\n%g\n",d1,d2);
}
printf ("\n3.5 Вывод числа 123.456 в шестнадцатеричной форме:\n");
{ double d1=123.456;
printf ("%a\n",d1);
}
printf ("\n4. Вывод символа 'k':\n");
{ char d1='k';
printf ("%c\n",d1);
}
printf ("\n5. Вывод строки 'abc':\n");
{ char d1[4]="abc";
printf ("%s\n",d1);
}
printf ("\n6. Вывод указателя:\n");
{ char d1[4]="abc";
printf ("%p\n",d1);
}
printf ("\n7. Подсчет выведенных символов:\n");
{ int d1=0;
fflush (stdout);
printf ("Derived characters:%n",&d1);
printf (" %d\n",d1);
}
//Принудительный вывод строки не дожидаясь заполнения буфера
printf ("\n6. Вывод буферизированной строки\n");
{ char d1[4]="abc";
printf ("%s",d1);
fflush (stdout);
}
return 0;
}
| |
Результат:
1. Вывод простой строки
2. Вывод целых чисел
2.1 Вывод числа 123 с форматом по умолчанию:
123
2.2 Вывод чисел c выравниванием по правому краю:
123
42
1543
2.3 Вывод чисел c выравниванием по левому краю:
123
42
1543
2.4 Вывод числа с выводом 0 в недостающих символах:
-00123
2.5 Вывод числа 123 с заданной шириной 6 символов:
123
2.6 Вывод числа 123 с заданной точностью 6 символов:
000123
2.7 Вывод числа типа char:
123
2.8 Вывод числа типа short int:
123
2.9 Вывод числа типа long int:
123
2.10 Вывод числа типа long long int:
123
2.11 Вывод целого без знакового числа:
123
2.12 Вывод целого числа в восьмеричном формате:
173
2.13 Вывод целого числа в шестнадцатеричном формате:
7b
2.14 Вывод целого числа в шестнадцатеричном формате:
0x7b
3. Вывод чисел c плавающей точкой
3.1 Вывод числа 123.456 с форматом по умолчанию:
123.456000
3.2 Вывод числа 123.456 с точностью 2:
123.46
3.3 Вывод числа 123.456 в экспоненциальной форме:
1.234560e+02
3.4 Использование преобразователя g:
123.457
1.23457e+06
3.5 Вывод числа 123.456 в шестнадцатеричной форме:
0x1.edd2f1a9fbe77p+6
4. Вывод символа 'k':
k
5. Вывод строки 'abc':
abc
6. Вывод указателя:
0xbff61348
7. Подсчет выведенных символов:
Derived characters: 19
6. Вывод буферизированной строки
abc
| |
Смотри так же:
fgetc
fgets
fputc
fputs
getc
getchar
gets
getw
printf
putc
puts
putchar
putw
ungetc
|