Функция 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
Вы можете добиться большего при выводе элементов с помощью спецификаторов полей. Они расширяют возможности спецификаторов преобразований, управляя расположением элементов при выводе. Обычно задается количество десятичных разрядов для числа с плавающей точкой или величина пробельных отступов, обрамляющих строку.
Спецификаторы полей задаются в виде чисел, следующих в спецификаторах преобразований непосредственно за знаком %
| Формат | Аргумент | Вывод |
|---|---|---|
%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| |
Все приведенные примеры выводятся в поле шириной 10 символов. Обратите внимание на то, что отрицательная ширина поля означает выравнивание элемента по левому краю в пределах поля. Переменная ширина поля обозначается символом "звездочка" (*
printf не обрезает поля; наоборот она расширяет поле, чтобы вместить в него аргумент. Например, если вы попытаетесь вывести строку большей длины, чем заданное поле, ширина поля будет увеличена (табл. 3.6).| Формат | Аргумент | Вывод |
|---|---|---|
%10s | "HelloTherePeeps" | |HelloTherePeeps| |
Функции семейства printf
sprintf в него не включается завершающий нуль-символ. При наличии ошибок эти функции возвращают отрицательное значение и задают переменную errno.Семейство функций scanf
printf за исключением того, что эти функции читают элементы из потока и помещают их в переменные, адреса которых им передаются как параметры-указатели. Для управления преобразованиями ввода функции применяют строку format аналогичным образом и используют многие спецификаторы преобразований функций группы printf.#include
int scanf(const char *format, ...);