Лекция.
Форматный ввод и вывод данных
Большинство версий компиляторов C++ включают также библиотеки ввода-вывода языка Си, позволяющий использовать для вывода функцию printf(аналог потока cout).
Функция printf не обеспечивает должного контроля за типом данных, поэтому можно отобразить число как символ. Или символ как число.
Для использования функции printf необходимо подключить заголовочный файл cstdio
В общем виде printf можно записать так:
printf(“Управляющая строка”, аргумент1, аргумент2, … , аргумент n);
Управляющая строка содержит компоненты трех типов:
Обычные символы, которые копируются в стандартный входной поток (выводятся на экраны).
Спецификации преобразования, каждая из которых вызывает вывод на монитор очередного аргумента из последующего списка.
Управляющие символьные константы.
Каждая спецификация преобразования начинается с символа % и заканчивается некоторым символом, задающим преобразования.
Между знаком % и символом преобразования могут встречаться другие знаки, в соответствии со следующим форматом
| | 2 | 3 | 4 | 5 | 1 |
| % | [признаки] | [ширина поля] | [.точность] | [буквы f:F:n:N] | c_n |
c_n – это символ преобразования и на его месте могут быть записаны:
c – значением аргумента является символ.
d или i – значением аргумента является целое число.
e – значением аргумента является вещественное число в экспоненциальной форме (например, 1.2345e+2).
E – значением аргумента является число в экспоненциальной форме (1.2345E+2).
f – значением аргумента является вещественное число с плавающей точкой типа float.
g – значением аргумента является вещественное число, но исключается вывод незначащих нулей.
O – значением аргумента является восьмеричное число.
s – значение аргумента – строка символов.
u – значением аргумента является беззнаковое целое число.
x – значением аргумента является шестнадцатеричное число.
p – значением аргумента является указатель.
n – используется в операциях форматирования.
Признак.
« - » - указывает, что преобразованный параметр должен быть выровнен по левому краю.
«+» - приводит к выводу данных со знаком, включая знак +.
Ширина поля – это строка цифр, задающая минимальный размер поля.
Если ширина поля больше длины строки, то добавляются пробелы.
.точность
Это строка цифр, задающая максимальное количество символов или количество цифр, которое нужно вывести справа от десятичной точки в значениях типа float или double.
При выводе вещественного числа типа double указывается символ l (английское «эл»). При выводе аргумента типа long double указывается символ L.
Если после знака % записан не символ преобразования, то он выводится на монитор. В функции printf можно использовать те же эскейп-последовательности, что и в потоке cout (\n, \t и т.д.).
Пример.
Объявим и проинициализируем переменные вещественного типа и выведем их на монитор с помощью printf.
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
//объявляем и инициализируем переменные
int x=7;
double y=-9.25;
//вывод переменных
printf("\n Значение переменной x = %i", x);
printf("\n Значение переменной y = %7.2lf", y); //или %-15.2lf
printf("\n");
}
Другой вариант вывода:
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
//объявляем и инициализируем переменные
int x=7;
double y=-9.25;
//вывод переменных
printf("\n Значение переменной x = %d y = %7.2lf", x, y);
printf("\n");
}
Форматный ввод данных
Функция scanf обеспечивает форматный ввод данных, её можно написать в следующем формальном виде
scanf(“Управляющая строка”, аргумент1, аргумент2, … , аргумент n);
Аргументы должны быть указателями на соответствующие значения. Поэтому перед именем аргументов обязательно ставить символ &.
Управляющая строка содержит спецификации преобразований и используется для установления количества и типов аргументов.
В нее могут включаться спецификации преобразования таким же как в функции printf.
Пробелы, символы табуляции и перехода на новую строку. Все они игнорируются.
Пример.
Напишем программу, в которой с клавиатуры, с помощью scanf будут вводиться два числа целого и вещественного типа, а затем с помощью printf числа должны выводиться на монитор.
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
//объявляем и инициализируем переменные
int a;
double b;
//ввод a
printf("\n Ввести a = ");
scanf("%d", &a);
//ввод b
printf("\n Ввести b = ");
scanf("%lf", &b);
//вывод
printf("\n a = %d b = %lf", a, b);
printf("\n");
}
Изменим программу, воспользовавшись оператором создания новых имен для типов переменных:
#include
#include
using namespace std;
typedef double beta;
int main()
{
setlocale(LC_ALL, "RUS");
//объявляем и инициализируем переменные
int a;
beta b;
//ввод a
printf("\n Ввести a = ");
scanf("%d", &a);
//ввод b
printf("\n Ввести b = ");
scanf("%lf", &b);
//вывод
printf("\n a = %d b = %lf", a, b);
printf("\n");
}