Консольный ввод-вывод
Понятие потока
Ввод-вывод информации
Традиционный способ ввода-вывода
Форматированный ввод-вывод
Строка форматирования
Флаг
Ширина
Модификатор
Тип
Тип
Пример
Пример
Неформатированный ввод-вывод
Пример
Пример
Ввод символов
Пример
Пример
Объектно-ориентированный ввод-вывод
Объектно-ориентированный ввод-вывод
Потоковый вывод
Потоковый ввод
Пример
Пример
Форматирование вывода
Методы
Пример
Флаги
Флаги
Флаги
Флаги
Пример
Пример
Пример
Пример
Манипуляторы
Манипуляторы
Манипуляторы
Манипуляторы
Пример
Пример
Пример
Пример
Пример
Манипуляторы с аргументами
Пример
Кириллица на консоли
Кириллица на консоли
Пример
Пример
Кириллица на консоли
Пример
590.77K
Category: programmingprogramming

Консольный ввод-вывод

1. Консольный ввод-вывод

Консольный вводвывод

2. Понятие потока

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

3. Ввод-вывод информации

В стандартном C++ существует два основных пути вводавывода информации:
• объектно-ориентированный с помощью потоков,
реализованных в STL (Standard Template Library)
• посредством традиционной
унаследованной от C.
системы
ввода-вывода,

4. Традиционный способ ввода-вывода

#include <stdio.h> либо #include <cstdio>
При запуске программы автоматически открываются ряд
потоков, основными из которых являются следующие:
• cтандартный поток ввода stdin;
• cтандартный поток вывода stdout;
• cтандартный поток вывода сообщений об ошибках
stderr.
Стандартный поток ввода stdin по умолчанию
соответствует клавиатуре, а потоки stdout и stderr –
экрану монитора.

5. Форматированный ввод-вывод

Функции форматированного ввода-вывода:
• printf(строка_форматирования,
список_выводимых_переменных);
• scanf(строка_форматирования,
список_адресов_вводимых_переменных);

6. Строка форматирования

Строка форматирования содержит:
• символы, которые будут выводиться на экран или
запрашиваться с клавиатуры;
• так называемые спецификации.
Спецификации – это строки, которые начинаются
символом % и выполняют управление форматированием:
%«флаг»«ширина».«точность»«модификатор»«тип»

7. Флаг

Параметр
Назначение
Выравнивание числа влево. Правая сторона
дополняется пробелами. По умолчанию
выравнивание вправо.
+
Перед числом выводится знак «+» или «-»
Перед положительным числом выводится
Пробел
пробел, перед отрицательным «–»
Выводится код системы счисления:
#
0 – перед восьмеричным числом,
0х (0Х) – перед шестнадцатеричным числом.

8. Ширина

Параметр
n
0n
Назначение
Минимальное число выводимых символов.
Незаполненные позиции заполняются пробелам
Минимальное число выводимых символов.
Незаполненные позиции заполняются нулями
Точность
Параметр
n
Назначение
Для вещественных типов выводить n знаков
после точки

9. Модификатор

Параметр
h
l
Назначение
Используется в качестве префикса с целыми
типами для определения, что аргумент является
short int
Используется в качестве префикса с целыми
типами для обозначения, что аргумент является
long int или long long int.
Символ l используется также как префикс с
вещественными типами для определения, что
аргумент является скорее double, чем float

10. Тип

Параметр
Назначение
c
Вывод одного символа
s
Вывод строки символов
d
Вывод целого десятичного числа
Вывод целого десятичного, восьмеричного или
i
шестнадцатеричного числа
Вывод вещественного числа с плавающей
E, е
точкой
Вывод вещественного числа с фиксированной
f
точкой

11. Тип

Параметр
Назначение
G, g
Вывод более краткое из e и g
Вывод целого беззнакового восьмеричного
o
числа
Вывод целого беззнакового
X, х
шестнадцатеричного числа
u
Вывод целого беззнакового десятичного числа
p
Вывод значения указателя

12. Пример

Зная длины сторон a, b и c, вычислить площадь S и
периметр P треугольника.
Площадь треугольника можно вычислить по формуле:
S r r a r b r c

13. Пример

#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, S, P, r;
printf("Input a,b,c:\n");
scanf("%lf%lf%lf", &a, &b, &c);
P = a + b + c;
r = P / 2;
S = sqrt(r * (r - a) * (r - b) * (r - c));
printf("S=%5.2lf\tP=%5.2lf", S, P);
return 0;
}

14. Неформатированный ввод-вывод

Для ввода-вывода символов и строк используются
следующие функции:
• getchar(); – ввод с клавиатуры одного символа;
• putchar(); – вывод на консоль одного символа;
• fgets(); – ввод строки;
• puts(); – вывод строки на консоль.

15. Пример

#include <stdio.h>
int main()
{
puts("Hello");
putchar('w');
putchar('o');
putchar('r');
putchar('l');
putchar('d');
return 0;
}

16. Пример

#include <stdio.h>
int main()
{
puts("Input symbol:");
char c = getchar();
printf("Your symbol - %c", c);
return 0;
}

17. Ввод символов

При использовании getchar() в конце ожидается
нажатие «Enter», вводимые символы отображаются на
экране.
Функция getch(), определённая в заголовочном файле
<conio.h>, позволяет вводить символы без отображения
их на экране и без использования «Enter».

18. Пример

#include <stdio.h>
#include <conio.h>
int main()
{
puts("Input symbol:");
char c = getch();
printf("Your symbol - %c", c);
return 0;
}

19. Пример

#include <stdio.h>
int main()
{
puts("Input word:");
char s[20];
gets(s);
printf("Your word - %s", s);
return 0;
}

20. Объектно-ориентированный ввод-вывод

#include <iostream>
В библиотеке <iostream> определены четыре потока:
• cin – связанный со стандартным вводом;
• cout – связанный со стандартным выводом;
• cerr – связанный со стандартной
обеспечивающий небуферизованный вывод;
• clog – буферизованный аналог cerr.
ошибкой,

21. Объектно-ориентированный ввод-вывод

В библиотеке <iostream> для потоков переопределены
следующие операции:
• >> – получить из входного потока;
• << – поместить в выходной поток.
Функционал потоков ввода/вывода не определен как часть
языка C++, а предоставляется стандартной библиотекой
C++ (и, следовательно, находится в пространстве имен std).
using namespace std;
std::

22. Потоковый вывод

cout << значение;
cout << значение1 << значение2 << ... << значениеN;
В цепочке операторов << можно использовать
манипулятор endl, который вызывает переход на новую
строку и сброс буфера.

23. Потоковый ввод

cin >> идентификатор;
cin >> идентификатор1 >> идентификатор2 >> ... >> идентификаторN;
При наборе данных на клавиатуре значения должны быть
разделены символами пробела, табуляции или окончания
строки.

24. Пример

Известны плотность ρ, высота h и радиус основания R
цилиндрического слитка, полученного в металлургической
лаборатории.
Найти объем V, массу m и площадь основания S слитка.

25. Пример

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double ro, h, R, S, V, m;
cout << "ro=";
cin >> ro;
cout << "h=";
cin >> h;
cout << "R=";
cin >> R;
S = M_PI * R * R;
V = S * h;
m = ro * V;
cout << "S=" << S << endl << "V=" << V << endl << "m=" << m;
return 0;
}

26. Форматирование вывода

Возможность форматирования вывода при использовании
потока cout, обеспечивают форматирующие методы,
флаги и манипуляторы.
Различие между ними состоит в способе применения.

27. Методы

cout.fill(char); – заполняет пустые знакоместа
символом
cout.width(n); – задает ширину поля вывода значения
cout.precision(n); – задает количество значащих
цифр или количество знаков после точки если задан
манипулятор или флаг fixed

28. Пример

#include <iostream>
using namespace std;
int main()
{
double x = 13.285, y = -0.074;
cout.width(8);
cout << "x=" << x << " y=" << y << endl;
cout.width(8);
cout.fill(95);
cout << x << endl;
cout.width(8);
cout.fill('0');
cout << y << endl;
return 0;
}

29. Флаги

Одних методов не достаточно для форматирования, поэтому в
С++ предусмотрен ещё один способ форматирования – флаги.
Флаги форматирования позволяют включить или выключить
один из параметров ввода/вывода.
Чтобы установить флаг ввода/вывода, необходимо вызвать
метод cout.setf(flag), если необходимо отключить флаг,
то используется метод cout.unsetf(flag).
Если необходимо установить (снять) несколько флагов, то
можно воспользоваться поразрядной логической операцией
ИЛИ |.

30. Флаги

Флаг
Описание
Вывод логических величин в текстовом
ios::boolalpha
виде (true, false)
Вывод величин в восьмеричной
системе
счисления
(сначала
ios::oct
необходимо снять флаг dec)
Вывод величин в десятичной системе
ios::dec
счисления (установлен по умолчанию)
Вывод величин в шестнадцатеричной
системе
счисления
(сначала
ios::hex
необходимо снять флаг dec)

31. Флаги

Флаг
Описание
ios::showpos Вывод знака числа
ios::uppercase В шестнадцатеричной системе счисления
использовать буквы верхнего регистра
(по умолчанию буквы нижнего регистра)
ios::showbas Вывод индикатора основания системы
счисления
ios::scientific Вывод чисел в формате с плавающей
точкой
Вывод чисел в формате с фиксированной
ios::fixed
точкой

32. Флаги

Флаг
ios::right
ios::left
Описание
Выравнивание по правой границе (по
умолчанию).
Сначала
необходимо
установить
ширину поля вывода
Выравнивание по левой границе

33. Пример

#include <iostream>
using namespace std;
int main()
{
bool a = true, b = false;
cout << a << '\t' << b << endl;
cout.setf(ios::boolalpha);
cout << a << '\t';
cout << b << endl;
cout.unsetf(ios::boolalpha);
cout << a << '\t' << b << endl;
return 0;
}

34. Пример

#include <iostream>
using namespace std;
int main()
{
int value = 199;
cout.unsetf(ios::dec);
cout.setf(ios::oct);
cout << value << endl;
cout.unsetf(ios::oct);
cout.setf(ios::hex | ios::showbase);
cout << value << endl;
cout.setf(ios::uppercase);
cout << value << endl;
cout.unsetf(ios::hex);
value = 0x1a9f;
cout << value << endl;
return 0;
}

35. Пример

#include <iostream>
using namespace std;
int main()
{
double a = -112.234, b = 4.39812;
cout.setf(ios::showpos);
cout << a << '\t' << b << endl;
cout.precision(8);
cout << a << '\t' << b << endl;
cout.precision(4);
cout << a << '\t' << b << endl;
cout.setf(ios::scientific);
cout << a << '\t' << b << endl;
cout.unsetf(ios::scientific);
cout.setf(ios::fixed);
cout << a << '\t' << b << endl;
return 0;
}

36. Пример

#include <iostream>
using namespace std;
int main()
{
cout.width(40);
cout.fill('_');
cout << "I am glad to see you" << endl;
cout.setf(ios::left);
cout.width(40);
cout.fill('_');
cout << "I am glad to see you" << endl;
return 0;
}

37. Манипуляторы

Манипулятор
Описание
Переход на новую строку
endl
Вывод величин в восьмеричной системе
oct
счисления
Вывод величин в десятичной системе
dec
счисления
Вывод величин в шестнадцатеричной
hex
системе счисления

38. Манипуляторы

Манипулятор
Описание
Выравнивание по правой границе (по
умолчанию).
Cначала
необходимо
right
установить ширину поля вывода.
Выравнивание по левой границе
left
знак выравнивается по левому краю, а
internal
значение – по правому
Вывод логических величин в текстовом
boolalpha
виде (true, false)
Вывод логических величин в числовом
noboolalpha
виде (по умолчанию)

39. Манипуляторы

Манипулятор
Описание
Вывод знака числа
showpos
noshowpos Отключает вывод знака числа
Отображается десятичная точка и
showpoint конечные нули чисел типа с плавающей
точкой
Не отображаются десятичная точка и
noshowpoint конечные нули чисел типа с плавающей
точкой

40. Манипуляторы

Манипулятор
Описание
В шестнадцатеричной системе счисления
uppercase
использовать буквы верхнего регистра
В шестнадцатеричной системе счисления
nouppercase
не использовать буквы верхнего регистра
showbase Вывод основания системы счисления
noshowbase Не выводить основание системы счисления
Вывод чисел в формате с плавающей
scientific
точкой
Вывод чисел в формате с фиксированной
fixed
точкой

41. Пример

#include <iostream>
using namespace std;
int main()
{
cout << 30 << endl;
cout << oct << 30 << " " << hex << 30 << " " << dec << 30 << endl;
cout << showbase << oct << 30 << " " << hex << 30 << " " << dec << 30 << endl;
cout << noshowbase << oct << 30 << " " << hex << 30 << " " << dec << 30 << endl;
return 0;
}

42. Пример

#include <iostream>
using namespace std;
int main()
{
cout.width(10);
cout << -12345 << endl;
cout.width(10);
cout << left << -12345 << endl;
cout.width(10);
cout << right << -12345 << endl;
cout.width(10);
cout << internal << -12345 << endl;
return 0;
}

43. Пример

#include <iostream>
using namespace std;
int main()
{
cout << true << " " << false << endl;
cout << noboolalpha << true << " " << false << endl;
cout << boolalpha << true << " " << false << endl;
return 0;
}

44. Пример

#include <iostream>
using namespace std;
int main()
{
cout << 7 << endl;
cout << noshowpos << 7 << endl;
cout << showpos << 7 << endl;
cout << 12345678.9 << " " << hex << 0x1af8 << endl;
cout << nouppercase << 12345678.9 << " " << hex << 0x1af8 << endl;
cout << uppercase << 12345678.9 << " " << hex << 0x1af8 << endl;
return 0;
}

45. Пример

#include <iostream>
using namespace std;
int main()
{
cout << 123.456 << endl;
cout.precision(3);
cout << showpoint << 123.456 << endl;
cout << noshowpoint << 123.456 << endl;
cout.precision(5);
cout << 123.456 << endl;
cout << scientific << 123.456 << endl;
cout << fixed << 123.456 << endl;
return 0;
}

46. Манипуляторы с аргументами

#include <iomanip>
Манипулятор
Описание
Задает ширину поля вывода
setw(n)
Задает символ-заполнитель
setfill(c)
setprecision(n) Задает точность для чисел с
плавающей точкой
Устанавливает
базу
счисления
setbase(n)
равной параметру n
setiosflags(f) Устанавливает флаги f
resetiosflags(f) Сбрасывает флаги f

47. Пример

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << setiosflags(ios::fixed);
cout << setprecision(1) << 123.456 << endl;
cout << resetiosflags(ios::fixed);
cout << 123.456 << endl;
cout << setbase(16) << 30 << endl;
cout << setw(40) << setfill('_') << "I am glad to see you" << endl;
return 0;
}

48. Кириллица на консоли

Windows – cp1251
Командная строка – cp866

49. Кириллица на консоли

Локаль – это набор параметров: набор символов, язык
пользователя, страна, часовой пояс и др.
#include <locale.h> либо #include <clocale>
setlocale(LC_CTYPE, "rus" );
LC_ALL
"Russian"
""

50. Пример

#include <iostream>
#include <clocale>
using namespace std;
int main()
{
cout << "Привет!" << endl;
setlocale(LC_CTYPE, "rus");
cout << "Привет!" << endl;
return 0;
}

51. Пример

#include <iostream>
#include <clocale>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "rus");
char s[20];
cin >> s;
cout << s << endl;
return 0;
}

52. Кириллица на консоли

#include <windows.h>
SetConsoleCP(1251); – ввод
SetConsoleOutputCP(1251); – вывод

53. Пример

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
cout << "Привет!" << endl;
char s[20];
cin >> s;
cout << s << endl;
return 0;
}

54.

СПАСИБО
ЗА
ВНИМАНИЕ
English     Русский Rules