Printf C: описание, форматирование, примеры

Стандартная функция консольного вывода в языке C – printf. Описание её содержится в заголовочном файле stdio.h. При помощи этой функции можно выводить данные или пользовательские сообщения в консоль. Язык C чувствителен к регистру. К примеру, две функции printf и scanf отличаются от подобных им Printf и Scanf. Все символы в функциях printf и scanf также должны быть записаны в нижнем регистре. Одним из простейших примеров C printf, выводящим на экран знакомое приветствие hello world, является:

printf c описание

Определение функций группы printf в файле "stdio.h"

Файл "stdio.h" относится к стандартной библиотеке ввода/вывода в языке С. Описание printf и подобных ей функций приводится в нём следующим образом:

printf c описание

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

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

Функции группы printf в языке C служат для обработки и форматированного вывода данных в стандартный поток. Причём функции printf и vprintf производят запись в стандартный поток stdout, функции fprintf и vfprintf отправляют значения выводимых аргументов в некоторый заданный выходной поток, а snprintf, sprintf, vsnprintf и vsprintf записывают данные в символьную строку. Все перечисленные функции работают с использованием строки формата, указывающей необходимые преобразования аргументов для вывода.

printf c форматирование

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

Функция snprintf так же, как и предыдущая, записывает данные в строковый буфер. Полученная строка символов завершается нулевым символом, если только bufsz (размер буфера) не равен нулю. Иначе, если значение bufsz равно нулю, то в буфер ничего не выводится, а сам буфер вполне может являться нулевым указателем, но возвращаемое значение (количество байтов, которое должно было быть записано) все равно вычисляется.

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

Подробнее рассмотрим функцию printf.

Общее описание

В языке C печать символов через стандартный поток вывода осуществляется посредством вызова функции printf. Команда printf в C форматирует набор выводимых данных, и они отправляются в стандартный поток вывода stdout. Значения, переданные в качестве аргументов функции, выводятся в консоль согласно указанной строке форматирования, которая в свою очередь заключает в себе две разновидности элементов. Первая разновидность - это символы, выводимые на экран, а элементы, определяющие особенности формата данных и отвечающие за метод представления аргументов при выводе, относятся ко второму виду.

При выводе переменных с printf в C особые комбинации символов в строке аргументов заменяются на преобразованные в соответствии с этими символами данные, причём для каждого типа данных существуют свои спецификации формата вывода.

Тип функции и возвращаемое значение

Функция printf, имеющая тип int, возвращает целочисленную величину, обозначающую количество напечатанных на экране символов. К примеру, можно присвоить:

int k = printf("Привет %c %d %s", 'a', 11, "всем!"),

и тогда по значению переменной k легко определяется, возникла ли ошибка при выводе. В случае возврата отрицательного значения (если функция вернула "-1") можно сделать вывод, что произошла ошибка при её выполнении.

Синтаксис и зависимости

Чтобы использовать функцию printf, требуется подключить заголовочный файл "stdio.h" следующим образом:

#include <stdio.h>

Шаблон функции выглядит:

int printf(const char *формат, ...)

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

Форма задания спецификаций формата:

%[флаги][ширина][.позиция][длина]тип

printf c вывод переменных

Форматирование с printf в C выходных значений

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

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

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

Для явного указания, который по счёту аргумент нужно задействовать, возможно использовать "%m$" вместо "%" и "*m$" вместо "*", причём m, целочисленное десятичное значение, обозначает позицию нужного аргумента (индексирование начинается с единицы).

Параметры

streamВыходной поток для записи в файл
bufferУказатель на символьную строку для последующей записи в неё
bufszОпределяет число символов, допустимое для записи: максимальное значение - bufsz-1, и ещё нулевой ограничитель
formatУказатель на многобайтовую строку с нулевым ограничителем, определяющую, как интерпретировать выводимые аргументы
Флаги, используемые в строке формата
ФлагОписание
-Выравнивание результата по левому краю в поле вывода
+При выводе численного значения, имеющего знак, принудительно печатается "+" перед положительной величиной (по умолчанию выводится только "-" перед отрицательным значением)
0Для целых чисел и чисел с плавающей запятой ведущие нули используются вместо символов пробела для заполнения левых разрядов в случае, если задана ширина поля, превышающая длину числа. Для целых чисел флаг игнорируется, если явно указана точность. Для других преобразований с использованием этого флага поведение функции не определено. Флаг "0" не учитывается, если присутствует флаг "-"
spaceЕсли результат вывода выражения, имеющего знак, не начинается с символа этого знака или пуст, то пробел добавляется к результату. Флаг "space" игнорируется, если присутствует флаг "+"
#Выполняется альтернативная форма преобразования
Управляющие последовательности
ПоследовательностьРезультат
\aЗвуковой сигнал
\nПеревод на новую строку
\rВозвращение курсора в начало строки
\tТабуляция
\vВертикальная табуляция
\"Вывод двойной кавычки
\\Вывод косой черты

Различные спецификаторы формата

Спецификатор форматаИспользование и описание для printf CТип аргумента
%Запись литерала "%"
cВывод одного символа. Происходит преобразование аргумента в тип unsigned char. При использовании модификатора "l" аргумент преобразуется в строку символовunsigned char
sПечать строки символов. Аргумент должен являться указателем на начальный элемент массива символов charchar *
d
i
Вывод десятичного представления целочисленного значения со знакомint
oВывод восьмеричного представления без знакового целочисленного значенияunsigned int
x
X
Вывод шестнадцатеричного представления без знакового целочисленного значения. Символы "a", "b", "c", "d", "e", "f" применяются для преобразования "x". А для преобразования "X" - "A", "B", "C", "D", "E", "F"unsigned int
uВывод десятичного преобразования без знакового целочисленного значения. Если преобразованное значение и точность вместе равны 0, то символы не выводятсяunsigned int
f
F
Вывод десятичного представления числа с плавающей запятой, имеющего знакdouble
e
E
Вывод десятичного экспоненциального представления числа с плавающей запятой, округлённого и преобразованного так, что перед запятой остаётся одна цифра, а количество цифр после запятой соответствует точности представления (по умолчанию точность равна 6, а если указан 0, то символ запятой не выводится вообще). Символ "е" выводится в верхнем или нижнем регистре в зависимости от преобразованияdouble
a
A
Вывод шестнадцатеричного представления числа с плавающей запятойdouble
g
G
Вывод десятичного представления числа с плавающей запятой или его десятичного экспоненциального представления в зависимости от значения и точностиdouble
nВозврат числа элементов, выведенных функцией printf. Результат записывается в переменную, на которую указывает аргумент. Спецификация может не содержать флагов, ширины поля или точностиint *
pВывод указателяvoid *

printf c форматирование

Модификатор ширины поля

В строке формата в printf C может быть записано целое число после знака процента и перед командой форматирования. Оно является модификатором ширины поля и влияет на представление отображаемых данных. Наименьшая ширина поля, предназначенная для значения, определяется этим числом, и присутствие такого модификатора в случае, если аргумент оказывается меньше выделенного ему поля, вызывает добавление к результату пробелов или нулей. Заполнителем по умолчанию служит символ пробела, однако можно установить ноль, прописав его перед спецификацией ширины. Модификатор указывает минимум ширины, и любое превышающее этот минимум значение будет напечатано без помех. Число, к примеру, состоящее менее чем из восьми символов и печатаемое со спецификацией "%08d", окажется дополненным до необходимых восьми знаков нулями.

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

Модификатор точности

Модификатор точности служит для определения числа печатаемых десятичных знаков в представлении чисел. Для добавления модификатора точности необходимо поставить точку после спецификации ширины поля и указать нужное значение точности после неё. Модификатор точности определяется для "e", "f", "a", "E", "A" и "F" форматов. Для целых чисел модификатор устанавливает количество отображаемых цифр, добавляя нули в левый разряд, если нужно, а при выводе рациональных чисел определяет необходимое количество знаков после запятой. Применительно к строковым переменным: следующее после точки число в модификаторе точности служит определителем максимальной длины поля при выводе. К примеру, при заданной спецификации формата "%4.8s" будет выведена строка, длина которой находится в диапазоне от четырёх до восьми символов, в случае превышения крайние символы будут опущены.

Другие модификаторы формата

Выравниванием по умолчанию является выравнивание по правому краю, однако это можно изменить, поставив знак "-" после "%". Такая спецификация формата устанавливает выравнивание по левому краю.

Кроме того, функция printf способна различать короткие и длинные типы выводимых целых значений. Допустимые спецификаторы: "о", "d", "u", "i", "x" и "X". Длинный тип значения устанавливается модификатором "l", а короткий – модификатором "h". Например, при выводе длинного целого числа и значения типа short unsigned int спецификации формата выглядят как "%ld" и "%hu" соответственно.

ДлинаОписание
hДля типов short или unsigned short
lДля типов long или unsigned long
LДля типа long double

Примеры

1. Описание printf C и результаты вызова каждой функции:

форматированный вывод printf c

2. Вывод на экран простого диалогового сообщения:

printf("сообщение");

3. Программный код:

примеры printf c

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

printf c примеры

Данный пример иллюстрирует вывод на экран при помощи различных форматов строк, целочисленных переменных, символов, а также чисел с плавающей точкой.

Стандартная функция ввода scanf и примеры её использования

scanf c формат

Функция scanf используется для чтения вводимых с клавиатуры данных. Описание printf и scanf в C представлено в заголовочном файле "stdio.h".

scanf("format specifiers",&value1,&value2, ...);

c printf формат

Простой пример работы с функцией scanf:

#include <stdio.h>

int main(){

int a;

float b;

scanf("%d%f",&a,&b);

}

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.