Похожие презентации:
Консольный ввод-вывод
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.
СПАСИБОЗА
ВНИМАНИЕ
Программирование