Ввод и вывод

Существует много способов для ввода и вывода данных. На наш взгляд, самым удобным является ввод и вывод через стандартные потоки cin на ввод и cout на вывод.

Более подробная информация находится на cppreference (cin, cout).

Буква c в названии означает "символ", cin — ввод символов, cout — вывод символов.

Первым делом стоит подключить библиотеку iostream, которая содержит реализацию этих потоков, и ещё прописать using namespace std;.

Ввод

Для выполнения операций ввода переопределен оператор >>.

При выполнение cin >> x; из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу переменной x, и получаемое значение помещается в переменную x.

Если cin не смог сконвертировать входные данные в ожидаемый формат, то он будет помечен как ошибка и программа может завершиться с ошибкой (RE).

Можно вводить сразу много переменных и сразу разных типов — cin >> x >> y >> c >> d;.

Считывание строки (не типа)

Для этого существует функция getline из той-же библиотеки.

Прочтите, например, тут.

Вывод

Всё аналогично вводу, только перегружен оператор <<.

Команда cout << x << ' ' << y << '\n'; — выполнится только в том случае, если переменная x и y будут иметь реализацию для вывода (все базовые типы умеют это делать, но при выводе массив будет адрес (далее поймём почему)).

'\n' — символ перевода каретки (переход на новую строки). endl (std::endl) — хуже. Он делает тоже самое, но дополнительно делает достаточно бесполезное действие с буфером.

Ускорение ввода

Можно катастрофически ускорить чтение всего парами строками, размещённой в начале программы (в main сразу напишите):

ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

Если интересно, то прочтите почему это так.

Вообще можно построить свой буферный ввод и вывод, но таким не стоит заниматься.

Используйте '\n' вместо std::endl.

Хорошенько потренируйтесь, попробуйте вводить и выводить разные типы. Когда поймёте, что поняли эту тему, можете смело приступать к следующему уроку.

Last change: 2023-09-27, commit: 3f8b5e1