C++ Базовый ввод/вывод
Стандартная библиотека C++ предоставляет богатый набор возможностей ввода-вывода, которые мы представим в следующих главах. В этой главе будут рассмотрены самые базовые и распространённые операции ввода-вывода в программировании на C++.
Ввод-вывод в C++ происходит в потоках, которые представляют собой последовательности байтов. Если поток байтов идёт от устройства (например, клавиатуры, дискового накопителя, сетевого соединения и т. д.) в память, это называетсяоперациями ввода. Если поток байтов идёт из памяти к устройству (например, экрану дисплея, принтеру, дисковому накопителю, сетевому соединению и т. д.), это называетсяОперации вывода。
Заголовочный файл библиотеки ввода-вывода
Следующие заголовочные файлы важны в программировании на C++.
| Заголовочный файл | Функции и описания |
|---|---|
| <iostream> | Этот файл определяетcin、cout、cerrиclogобъекты, соответствующие стандартному потоку ввода, стандартному потоку вывода, небуферизованному стандартному потоку ошибок и буферизованному стандартному потоку ошибок соответственно. |
| <iomanip> | Этот файл использует так называемые параметризованные манипуляторы потоков (такие какsetwиsetprecision) для объявления сервисов, полезных для выполнения стандартизированного ввода-вывода. |
| <fstream> | Этот файл объявляет средства для управляемой пользователем обработки файлов. Мы обсудим его подробности в главе о файлах и потоках. |
Стандартный поток вывода (cout)
Предопределённые объектыcoutДаiostreamЭкземпляр класса. Объект cout "подключён" к стандартному устройству вывода, обычно к экрану дисплея.coutиспользуется вместе с оператором вставки в поток <<, как показано ниже:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Value of str is : Hello C++
Компилятор C++ выбирает подходящий оператор вставки в поток в соответствии с типом данных переменной, выводимой для отображения значения. Оператор << перегружен для вывода элементов данных встроенных типов (целое, с плавающей запятой, double, строка и указатель).
Оператор вставки в поток << можно использовать несколько раз в одной инструкции, как показано в примере выше,endlИспользуется для добавления символа новой строки в конце строки.
Стандартный поток ввода (cin)
Предопределённые объектыcinДаiostreamЭкземпляр класса. Объект cin привязан к стандартному устройству ввода, обычно к клавиатуре.cinиспользуется вместе с оператором извлечения из потока >>, как показано ниже:
Пример
Когда приведённый выше код скомпилирован и выполнен, он предлагает пользователю ввести имя. Когда пользователь вводит значение и нажимает Enter, будут видны следующие результаты:
请输入您的名称: cplusplus 您的名称是: cplusplus
Компилятор C++ выбирает подходящий оператор извлечения из потока в соответствии с типом данных вводимого значения, извлекает значение и сохраняет его в заданной переменной.
Оператор извлечения из потока >> можно использовать несколько раз в одной инструкции. Если необходимо ввести несколько элементов данных, можно использовать следующую инструкцию:
cin >> name >> age;
Это эквивалентно следующим двум инструкциям:
cin >> name; cin >> age;
Стандартный поток ошибок (cerr)
Предопределённые объектыcerrДаiostreamЭкземпляр класса. Объект cerr привязан к стандартному устройству вывода, обычно также к экрану дисплея, ноcerrОбъект небуферизован, и каждая вставка в поток cerr выводится немедленно.
cerrтакже используется вместе с оператором вставки в поток <<, как показано ниже:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Error message : Unable to read....
Стандартный поток журнала (clog)
Предопределённые объектыclogДаiostreamЭкземпляр класса. Объект clog привязан к стандартному устройству вывода, обычно также к экрану дисплея, ноclogОбъект буферизован. Это означает, что каждая вставка в поток clog сначала сохраняется в буфере и не выводится, пока буфер не заполнится или не будет сброшен.
clogтакже используется вместе с оператором вставки в поток <<, как показано ниже:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Error message : Unable to read....
На этих небольших примерах мы не можем уловить разницу между cout, cerr и clog, но при написании и выполнении больших программ различия между ними становятся очень очевидными. Поэтому хорошая практика программирования подсказывает нам использовать поток cerr для отображения сообщений об ошибках, а для вывода других сообщений журнала использовать поток clog.
Другие расширения