Стандартные библиотеки C ++ предоставляют расширенный набор возможностей ввода / вывода, которые мы увидим в последующих главах. В этой главе будут рассмотрены основные и наиболее распространенные операции ввода-вывода, необходимые для программирования на C ++.

C ++ I / O происходит в потоках, которые представляют собой последовательности байтов. Если байты поступают с устройства, такого как клавиатура, дисковод или сетевое соединение и т. д. В основную память, это называется операцией ввода, и если байты поступают из основной памяти в устройство, такое как экран дисплея, принтер, дисковод , или сетевое соединение и т. д., это называется операцией вывода .

Файлы заголовков библиотеки ввода-вывода

Для программ на C ++ важны следующие файлы заголовков -

<Iostream>

Этот файл определяет объекты cin, cout, cerr и clog , которые соответствуют стандартным входным потокам, стандартным потокам вывода, потоку стандартной буферизации без буферизации и потоку стандартной буферизации, соответственно.

<Iomanip>

Этот файл объявляет услуги , полезные для выполнения отформатированного ввода / вывода с помощью так называемым параметризованным потоком манипуляторами, такие как setw и setprecision .

<Fstream>

Этот файл объявляет службы для обработки файлов, управляемых пользователем. Мы обсудим это подробно в главе «Файл и поток».

Стандартный выходной поток (cout)

Предопределенный объект cout является экземпляром класса ostream . Сообщается, что объект cout «подключен к» стандартным устройствам вывода, который обычно является экраном дисплея. СоиЬ используется в сочетании с оператором вставки потока, который записывается в виде << которые являются два меньше , чем знаки , как показано в следующем примере.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Hello C++";
 
   cout << "Value of str is : " << str << endl;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Value of str is : Hello C++

Компилятор C ++ также определяет тип данных переменной, подлежащей выводу, и выбирает соответствующий оператор вставки потока для отображения значения. Оператор << перегружен для вывода элементов данных встроенных типов integer, float, double, string и значений указателя.

Оператор ввода << может использоваться более одного раза в одном выражении, как показано выше, и endl используется для добавления новой строки в конце строки.

Стандартный входной поток (cin)

Предопределенный объект cin является экземпляром класса istream . Говорят, что объект cin прикреплен к стандартным устройствам ввода, которые обычно являются клавиатурой. CIN используется в сочетании с оператором экстракции потока, который записывается как >> , которые являются два больше , чем знаки , как показано в следующем примере.

#include <iostream>
 
using namespace std;
 
int main() {
   char name[50];
 
   cout << "Please enter your name: ";
   cin >> name;
   cout << "Your name is: " << name << endl;
 
}

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

Please enter your name: cplusplus
Your name is: cplusplus

Компилятор C ++ также определяет тип данных введенного значения и выбирает соответствующий оператор извлечения потока для извлечения значения и сохранения его в данных переменных.

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

cin >> name >> age;

Это будет эквивалентно следующим двум утверждениям:

cin >> name;
cin >> age;

Стандартный поток ошибок (cerr)

Предопределенный объект cerr является экземпляром класса ostream . Говорят, что объект cerr прикреплен к стандартным устройству ошибок, которое также является экраном дисплея, но объект cerr не забуферирован, и каждая вставка потока в cerr вызывает немедленный вывод его вывода.

Сегг также используется в сочетании с оператором вставки потока , как показано в следующем примере.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Error message : Unable to read....

Стандартный поток журнала (засорение)

Предопределенный объект clog является экземпляром класса ostream . Объект clog, как говорят, прикреплен к стандартному устройству ошибок, который также является экраном дисплея, но затвор объекта буферизуется. Это означает, что каждая вставка для блокировки может привести к тому, что ее вывод будет удерживаться в буфере до заполнения буфера или до тех пор, пока буфер не будет сброшен.

Засорить также используется в сочетании с оператором вставки потока , как показано в следующем примере.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Error message : Unable to read....

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