C++ Базовый ввод/вывод: пример Cout, Cin, Cerr
⚡ Умное резюме
C++ Операции ввода и вывода основаны на потоковых объектах, которые передают данные в виде последовательностей байтов между программами и устройствами, при этом cin считывает ввод с клавиатуры, а cout, cerr и clog выводят данные на экран.

Что такое потоки C++?
C++ предоставляет пользователям ряд библиотек, которые они могут использовать для выполнения задач ввода/вывода. Эти задачи выполняются в виде последовательностей байтов, обычно называемых потоками.
Потоки делятся на два:
Типы потоков
- Входной поток: Это тип потока, в котором байты передаются из устройства, такого как клавиатура, в основную память.
- Выходной поток: Это тип потока, в котором байты передаются в противоположном направлении, то есть из основной памяти затем на устройство, такое как экран дисплея.
Как работают потоки?
C++ потоки работают следующим образом:
- Сначала поток инициализируется правильным типом.
- Далее следует указать, где будут происходить операции ввода-вывода, используя указатели get/put.
- Достигнув нужного места в потоке, вы можете выполнять задачи ввода и вывода с помощью операторов >> и << соответственно.
Таблица функций
Ниже приведены функции, представленные в заголовочном файлеstream.h:
| Класс | функции |
|---|---|
| Файлбуф | Он устанавливает файловые буферы для чтения/записи. В нем есть функции close() и open(). |
| fstreambase | Это базовый класс для классов ifstream, fstream и ofstream. Его операции являются общими для файловых потоков. |
| если поток | Это класс потока входного файла для выполнения операций ввода. |
| из потока | Это класс потока выходного файла для выполнения операций вывода. |
| fstream | Это класс потока ввода/вывода. Он поддерживает одновременные операции ввода/вывода. |
C++ Заголовочные файлы для ввода/вывода
C++ предоставляет три библиотеки с функциями для выполнения основных задач ввода/вывода. Они включают в себя:
- Иострим: Это аббревиатура стандартного потока ввода/вывода. Этот заголовочный файл содержит определения таких объектов, как cin/cout/cerr.
- Йоманип: Это аббревиатура от манипуляторов ввода/вывода. Библиотека поставляется с функциями, которые можно использовать для манипулирования потоками. Он содержит определения таких объектов, как setw, setprecision и других.
- Фстрим: Это заголовочный файл для описания файлового потока. Он обрабатывает данные, которые читаются из файла в качестве входных данных или записываются в файл (выходные данные).
Ключевые слова cin и cout очень популярны в C++. Они используются для приема входных данных и вывода на печать соответственно. Чтобы использовать их, вы должны включить заголовочный файл iostream в свою программу. Причина в том, что они определены в этом заголовочном файле. Если не включить файл заголовка iostream, возникнет ошибка. Это является результатом неудачи со стороны C++ компилятор, чтобы понять значение ключевых слов.
Основными объектами, определенными в заголовочном файле iostream, являются cin, cout, cerr и clog. Давайте обсудим их.
std :: cout
Объект cout является экземпляром класса iostream. Он используется для вывода вывода на стандартное устройство вывода, которым обычно является экран. Он используется вместе с оператором вставки потока (<<).
Пример
#include <iostream> using namespace std; int main() { char welcome[] = "Welcome to Guru99"; cout << welcome << endl; return 0; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите файл заголовка iostream, в котором определен объект cout.
- Включите пространство имен std, чтобы нам не приходилось вызывать его при использовании его классов.
- Вызовите функцию main(). Программный код должен быть добавлен в его тело. Открывающая фигурная скобка { отмечает начало тела.
- Создайте символьную переменную с именем welcome для хранения строки "Welcome to". Guru99.
- Выведите значение строки Welcome на консоль. Конец - это C++ ключевое слово, означающее конечную строку. Он перемещает курсор, чтобы начать печать текста на следующей строке.
- Программа должна вернуть значение после успешного выполнения.
- Конец тела функции main().
std :: cin
Объект `cin` является экземпляром класса `istream`. Он считывает ввод с устройства ввода, клавиатуры. Обычно он используется вместе с объектом `ex`.tracоператор (>>).tracОбъект отвечает за extracданные, введенные с клавиатуры из объекта cin.
Пример
В следующем примере показано, как использовать ключевое слово cin в C++:
#include <iostream> using namespace std; int main() { int number; cout << "Enter a number:"; cin >> number; cout << "\nYou entered: " << number; return 0; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите заголовочный файл iostream в нашу программу. Объект cin определен в этом заголовочном файле.
- Включите пространство имен std для использования его классов. Вам не придется вызывать std при использовании его классов.
- Вызовите функцию main(). Программный код должен быть добавлен в его тело.
- Начало тела программы.
- Объявить целочисленная переменная названный номер.
- Распечатайте на экране сообщение, предлагающее пользователю ввести номер.
- Считайте с клавиатуры значение, введенное пользователем на консоли.
- Распечатайте значение, прочитанное выше, на консоли вместе с другим текстом.
- Программа должна вернуть значение, если она выполняется успешно.
- Конец тела основной функции.
std :: cerr
Объект cerr формирует стандартный поток ошибок для вывода ошибок в C++. Cerr — это экземпляр класса ostream. Объект cerr не буферизован. Это означает, что он используется, когда сообщение об ошибке должно быть отображено немедленно.
Поскольку он не буферизован, он не сохраняет сообщения об ошибках для последующего отображения. Он используется вместе с оператором вставки потока (<<).
Пример
#include <iostream> using namespace std; int main() { cerr << "An Error occurred!"; return 0; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите файл заголовка iostream, в котором определен объект cerr.
- Включите пространство имен std, чтобы нам не приходилось вызывать его при использовании его классов.
- Вызовите функцию main(). Логика программы должна быть добавлена в ее тело. Открывающая фигурная скобка отмечает начало тела функции.
- Используйте объект cerr, чтобы вывести сообщение об ошибке на консоль.
- Программа должна вернуть значение после успешного выполнения.
- Конец тела основной функции.
станд:: засорить
Объект clog является экземпляром класса ostream. Он используется для отображения ошибок на стандартном дисплее монитора. Он похож на объект cerr, но буферизован. Поскольку он буферизован, он сохраняет сообщение об ошибке в буфере до тех пор, пока буфер не будет заполнен/очищен. Он используется вместе с оператором вставки потока (<<).
Пример
#include <iostream> using namespace std; int main() { clog << "An Error occurred!"; return 0; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включая заголовочный файл iostream, в котором определен объект засорения.
- Включаем пространство имен std, чтобы мы могли использовать его классы, не вызывая его.
- Вызов функции main(). Логика программы должна быть добавлена в ее тело. { отмечает начало тела функции.
- Используйте объект clog, чтобы вывести сообщение об ошибке на стандартный вывод — монитор.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main().
Обработка ошибок с потоками ввода-вывода
Те же самые объекты потока также сообщают об успешности операции, что и показывают проверки состояния потока.
Чтобы проверить, действителен поток или нет, вы можете использовать его как логическое значение.
Вот пример:
ifstream file( "myfile.txt" ); if ( ! file ) { cout << "File NOT opened!" << endl; }
Чтобы получить более подробную информацию о статусе потока, вы можете использовать эти функции:
- Good() — вернет true, если все в порядке.
- bad() — вернет true, если произойдет фатальная ошибка.
- fail() — вернет true после неудачной операции с потоком.
- eof() — вернет true, если достигнет конца файла.
Чтобы узнать, не удалась ли конкретная операция чтения/записи, проверьте результат чтения.
Например, чтобы проверить, ввел ли пользователь допустимое целое число, сделайте следующее:
int p; if ( cin >> p ) { cout << "Enter valid number" << endl; }




