Эти функции использовались для ввода-вывода в языке C и перешли из него в C++. Они включена в библиотеку stdio.h (стандартный ввод/вывод).
Функция printf выполняет форматируемый вывод в стандартный поток stdout. Синтаксис функции выглядит следующим образом:
int printf (format-string [, argument...]);
Здесь format-string – строка (char*) управления форматом, состоящая из обычных символов, escape-последовательностей и, если за строкой формата следуют аргументы, ещё и спецификации их формата. Обычные символы и escape-последовательности просто копируются в stdout в порядке их появления.
Например, при использовании конструкции вида
printf("Строка 1\n\tСтрока 2\n");
на экран будет выведено:
Строка 1
Строка 2
Если за строкой формата следуют аргументы, то эта строка также должна содержать спецификации формата, определяющие формат вывода этих аргументов. Спецификация формата всегда начинается с символа процента (%). Строка формата читается слева направо. Когда встречается первая спецификация формата (если она есть), то значение первого аргумента после строки формата преобразовывается и выводится согласно заданной спецификации. Вторая спецификация формата вызывает преобразование и вывод второго аргумента и так далее, до конца строки формата. Если аргументов больше, чем спецификаций формата, то эти дополнительные аргументы игнорируются. Результат является неопределённым, если аргументов недостаточно для всех спецификаций формата.
Пример использования printf для вывода значений переменных (аргументы перенесены на вторую строку для удобства чтения):
Предполагается, что строковой переменной tovar хранится строковое название товара, в целочисленной переменной ID – артикул, а в вещественной переменной cost – цена. Спецификация формата %s означает, что вместо нее в строку будет выведено строковое значение (взятое в данном случае из переменной tovar). %d – вывод целого числа, а %.2f – вывод вещественного числа с точностью до второго знака после запятой. Результатом данного оператора может быть строка следующего вида:
Название товара: Клавиатура Logitech Comfort Wave 450.
Артикул: 630957.
Цена: 1023.56.
Синтаксис объявления спецификаций выглядит следующим образом:
%[флаг(и)] [ширина] [.точность] [h | l | L] символ формата
Здесь h означает короткую, а l или L – длинную форму целого типа данных. Например, %ld означает long int, а %hd – short int. Ширина показывает, сколько символов будет выведено на экран. В это число входят все символы: и знак, и десятичная точка для дробных чисел. Если ширина окажется фактически меньше, чем требуется для вывода, то все равно значение выводится полностью. Точность задает количество цифр дробной части и применяется обычно только для дробных чисел.
В спецификации для задания типов выводимых данных используются следующие символы форматов:
Таблица 5 – Символы формата
Символ
Тип выводимого объекта
%с
символ (char)
%s
строка (char*)
%d
int
%i
int
%o
unsigned int (в восьмеричном виде)
%u
unsigned int
%х
unsigned int (в шестнадцатеричном виде, с символами abcdef)
%X
unsigned int (в шестнадцатеричном виде, с символами ABCDEF)
%f
вещественное число в фиксированном формате
%e
вещественное число в научном формате
%g
вещественное число в формате %e или %f в зависимости от значения
%p
указатель в шестнадцатеричном виде
Предостережение! Частая ошибка ― отсутствие соответствующей переменной для каждой спецификации в строке printf. Другая частая ошибка ― несоответствие типа переменной для спецификации. Обычно это происходит тогда, когда в строке много спецификаций и программист путает порядок требуемых переменных.
Для ввода данных из стандартного потока stdin (с клавиатуры) используется функция scanf. Первым параметром в ней также является форматная строка, за которой следует список адресов переменных, куда требуется поместить задаваемые значения. Для взятия адреса используется операция '&'.
Пример использования оператора scanf
#include <stdio.h>
int main()
{
float weight; //вес
int height; //рост
printf("Введите ваш вес: ");
scanf("%f", &weight);
printf("\nВведите ваш рост: ");
scanf("%d", &height);
printf("\n\nВес = %.2f, рост = %d\n", weight, height);