Создаём компьютерную игру
eng   рус

Ввод/вывод в С++. Потоки

Предыдущий урок: Типы данных и переменные в C++
Следующий урок: Операторы в C++

Теперь, после того как мы разобрались с переменными, мы готовы к детальному разговору о выводе (output) в C++. Также мы рассмотрим как получать ввод (input) пользователя в консольных приложениях.

Потоки (streams)

В языке С мы использовали функции printf и scanf для ввода/вывода. C++ тоже разрешает использовать их. Но в C++ есть новая абстракция - потоки (streams). Поток - это просто последовательность байтов. Он может перемещать данные в нашу программу (от клавиатуры, из файла, сети, переменной) или из нашей программы (в консоль, файл, сеть).

Потоки не зависят от конкретных устройств, они последовательны и они работают с символами. С клавиатуры мы получаем символы один за одним, в консоли мы печатаем сверху вниз, символ за символом. Что касается файлов, текстовые редакторы позволяют работать в любой части файла, но внутри любой файл это просто последовательность байтов. Пока что нам интересны только текстовые файлы, так что для нас любой файл - это последовательность символов. В C++ мы можем использовать потоки для чтения из файлов и для записи в файлы.

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

Существует четыре стандартных потока: cout, cerr, clog для вывода, и cin для ввода. Чтобы работать с потоками, нужно включить заголовочный файл iostream. Так что для любого консольного приложения, нужно добавить следующую строчку:

#include <iostream>

Давайте напечатаем строки с помощью разных потоков:

cout << "Hey!" << endl; cerr << "How are you?" << endl; clog << "Bye!" << endl;

По умолчанию все эти потоки выводят содержимое в консоль. Поэтому после выполнения данного кода вы увидите в консоли три строки текста. В разных ситуациях можно использовать разные потоки: вывод каких-нибудь вычислений в cout, обработать исключения и вывести сообщения об ошибках в cerr, записать логи в clog.

Для ввода используется поток cin. Он может работать с разными типами данных.

int i; float f; cin >> i; cin >> f;

Операторы вставки (insertion) и извлечения (extraction) в C++

Оператор вставки << используется, чтобы поместить данные в поток. А с помощью оператора извлечения >> мы вытаскиваем данные из потока. Чтобы легко их запомнить, представьте что данные двигаются в направлении стрелочек, а вставка/извлечение относится к потокам.

Перенаправление потоков ввода/вывода в файлы

Мы можем перенаправлять потоки в файлы. Мы можем сделать это прямо в наших программах с помощью кода, но на даннй момент нам не хватает для этого знаний. Существует более простой способ. При запуске программы можно указать какие файлы будут использоваться для перенаправления стандартных потоков ввода/вывода:

a.exe < input_file b.exe > output_file c.exe < in.txt > out.txt

Программа a.exe будет получать ввод из файла input_file, b.exe будет выводить данные в output_file, а программа c.exe будет получать ввод из in.txt и писать в out.txt.

Мы будем испоьзовать эту возможность в следующих уроках.

Вывод

В данном уроке мы рассмотрели потоки ввода/вывода (input/output) в языке C++ и концепцию потоков. В следующих уроках мы научимся работать с потоками файлов.

Комментарии:

No comments yet