Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

printf, fprintf и sprintf

Семейство функций

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

#include <stdio.h>

int printf(const char *format, ...);

int sprintf(char *s, const char *format, ...);

int fprintf(FILE * stream, const char *format, ...);

Функция

printf
выводит результат в стандартный вывод. Функция
fprintf
выводит результат в заданный файловый поток
stream
. Функция
sprintf
записывает результат и завершающий нулевой символ в строку
s
, передаваемую как параметр. Эта строка должна быть достаточно длинной, чтобы вместить весь вывод функции.

У семейства

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

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

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

printf("Some numbers: %d, %d, and &d\n", 1, 2, 3);

Он порождает в стандартном выводе следующую строку.

Some numbers: 1, 2, and 3

Для вывода символа

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

Далее перечислены наиболее часто применяемые спецификаторы преобразований:

%d
,
%i
— выводить целое как десятичное число;

%о
,
%x
— выводить целое как восьмеричное, шестнадцатеричное число;

%с
— выводить символ;

%s
— выводить строку;

%f
— выводить число с плавающей точкой (одинарной точности);

%e
— выводить число с двойной точностью в формате фиксированной длины;

%g
— выводить число двойной точности в общем формате.

Очень важно, чтобы число и тип аргументов, передаваемых функции

printf
, соответствовали спецификаторам преобразования в строке
format
. Необязательный спецификатор размера применяется для обозначения типа целочисленных аргументов.

Он может быть равен

h
, например,
%hd
для обозначения типа
short int
(короткие целые), или
l
, например,
%ld
для обозначения типа
long int
(длинные целые). Некоторые компиляторы могут проверять эти установки
printf
, но они ненадежны. Если вы применяете компилятор GNU gcc, можно вставить для этого в команду компиляции опцию
– Wformat
.

Далее приведен еще один пример:

char initial = 'А';

char *surname = "Matthew";

double age = 13.5;

printf("Hello Mr %c %s, aged %g\n", initial, surname, age);

Будет выводиться следующая информация:

Hello Mr A Matthew, aged 13.5

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

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

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

Таблица 3.5

Формат Аргумент Вывод
%10s
"Hello"
| Hello|
%-10s
"Hello"
|Hello |
%10d
1234
| 1234|
%-10d
1234
|1234 |
%010d
1234
|0000001234|
%10.4f
12.34
| 12.3400|
%*s
10, "Hello"
| Hello|
  • Читать дальше
  • 1
  • ...
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: