C++ Базовый ввод/вывод

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

Ввод-вывод в C++ происходит в потоках, которые представляют собой последовательности байтов. Если поток байтов идёт от устройства (например, клавиатуры, дискового накопителя, сетевого соединения и т. д.) в память, это называетсяоперациями ввода. Если поток байтов идёт из памяти к устройству (например, экрану дисплея, принтеру, дисковому накопителю, сетевому соединению и т. д.), это называетсяОперации вывода。

Заголовочный файл библиотеки ввода-вывода

Следующие заголовочные файлы важны в программировании на C++.

Заголовочный файлФункции и описания
<iostream>Этот файл определяетcin、cout、cerrиclogобъекты, соответствующие стандартному потоку ввода, стандартному потоку вывода, небуферизованному стандартному потоку ошибок и буферизованному стандартному потоку ошибок соответственно.
<iomanip>Этот файл использует так называемые параметризованные манипуляторы потоков (такие какsetwиsetprecision) для объявления сервисов, полезных для выполнения стандартизированного ввода-вывода.
<fstream>Этот файл объявляет средства для управляемой пользователем обработки файлов. Мы обсудим его подробности в главе о файлах и потоках.

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

Предопределённые объектыcoutДаiostreamЭкземпляр класса. Объект cout "подключён" к стандартному устройству вывода, обычно к экрану дисплея.coutиспользуется вместе с оператором вставки в поток <<, как показано ниже:

Пример

#include <iostream> using namespace std; int main( ) { char str[] = "Hello C++"; cout << "Значение str : " << str << endl; }

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

Value of str is : Hello C++

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

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

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

Предопределённые объектыcinДаiostreamЭкземпляр класса. Объект cin привязан к стандартному устройству ввода, обычно к клавиатуре.cinиспользуется вместе с оператором извлечения из потока >>, как показано ниже:

Пример

#include <iostream> using namespace std; int main( ) { char name[50]; cout << "Пожалуйста, введите ваше имя:"; cin >> name; cout << "Ваше имя:" << name << endl; }

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

请输入您的名称: cplusplus
您的名称是: cplusplus

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

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

cin >> name >> age;

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

cin >> name;
cin >> age;

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

Предопределённые объектыcerrДаiostreamЭкземпляр класса. Объект cerr привязан к стандартному устройству вывода, обычно также к экрану дисплея, ноcerrОбъект небуферизован, и каждая вставка в поток cerr выводится немедленно.

cerrтакже используется вместе с оператором вставки в поток <<, как показано ниже:

Пример

#include <iostream> using namespace std; int main( ) { char str[] = "Не удается прочитать...."; cerr << "Сообщение об ошибке: " << str << endl; }

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

Error message : Unable to read....

Стандартный поток журнала (clog)

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

clogтакже используется вместе с оператором вставки в поток <<, как показано ниже:

Пример

#include <iostream> using namespace std; int main( ) { char str[] = "Не удается прочитать...."; clog << "Сообщение об ошибке: " << str << endl; }

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

Error message : Unable to read....

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


Другие расширения