Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Потоки в C++: cout, cin, cerr, clog — практическое руководство

Что такое потоки в C++?

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

Потоки делятся на две категории:

Типы потоков

В этом уроке рассмотрим:

Как работают потоки

Типичный поток операции C++:

  1. Создать объект потока нужного типа.
  2. Связать поток с устройством или файлом через указатели get/put.
  3. Выполнить ввод/вывод через операторы извлечения (>>) или вставки (<<).

Обзор классов потоков

Заголовочный файл streambuf предоставляет классы управления файловыми буферами:

КлассОписание
filebufУправляет файловыми буферами чтения/записи. Методы open() и close().
fstreambaseБазовый для ifstream, fstream, ofstream — общие файловые операции.
ifstreamВходной файловый поток для чтения данных.
ofstreamВыходной файловый поток для записи данных.
fstreamКомбинированный входной/выходной поток.

Заголовочные файлы C++ для ввода/вывода

Все эти объекты определены в iostream; пропуск заголовочного файла вызовет ошибку компиляции.

std::cout

Объект cout пишет в стандартный выходной поток, обычно консоль. Используется с оператором вставки (<<).

Пример

#include <iostream>
using namespace std;
int main() {
    char welcome[] = "Welcome to Guru99";
    cout << welcome << endl;
    return 0;
}

Вывод:

Потоки в C++: cout, cin, cerr, clog — практическое руководство

Разбор кода:

  1. Подключаем iostream для доступа к cout.
  2. Используем пространство имён std.
  3. Определяем символьный массив с сообщением.
  4. Печатаем сообщение с endl для перевода строки.
  5. Возвращаем 0 — успех.

std::cin

Объект cin читает из стандартного входного потока, обычно клавиатуры. Парный оператор — извлечение (>>).

Пример

#include <iostream>
using namespace std;
int main() {
    int number;
    cout << "Enter a number:";
    cin >> number;
    cout << "\nYou entered: " << number;
    return 0;
}

Вывод:

Потоки в C++: cout, cin, cerr, clog — практическое руководство

Разбор кода:

  1. Подключаем iostream для cin и cout.
  2. Используем std.
  3. Объявляем целочисленную переменную.
  4. Выводим приглашение.
  5. Считываем ввод через >>.
  6. Эхо-вывод введённого значения.
  7. Возвращаем 0.

std::cerr

Поток cerr выводит сообщения об ошибках немедленно, так как он не буферизирован. Используйте для критических ошибок, которые должны появиться сразу.

Пример

#include <iostream>
using namespace std;
int main() {
    cerr << "An Error occurred!";
    return 0;
}

Вывод:

Потоки в C++: cout, cin, cerr, clog — практическое руководство

Разбор:

  1. Подключаем iostream для cerr.
  2. Используем std.
  3. Мгновенно печатаем сообщение об ошибке.
  4. Возвращаем 0.

std::clog

В отличие от cerr, clog буферизирован — накапливает сообщения до сброса буфера. Удобен для логирования, которое может быть отложено.

Пример

#include <iostream>
using namespace std;
int main() {
    clog << "An Error occurred!";
    return 0;
}

Вывод:

Потоки в C++: cout, cin, cerr, clog — практическое руководство

Разбор:

  1. Подключаем iostream для clog.
  2. Используем std.
  3. Пишем буферизированное сообщение об ошибке.
  4. Возвращаем 0.

Обработка ошибок с потоковыми объектами

Потоки можно оценивать в булевом контексте для проверки валидности. Дополнительно функции-члены дают детальный статус:

Пример — проверка открытия файла:

ifstream file("myfile.txt");
if (!file) {
    cout << "File NOT opened!" << endl;
}

Пример — валидация пользовательского ввода:

int p;
if (cin >> p) {
    cout << "Enter valid number" << endl;
}

Резюме

Язык C

  1. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  2. Освоение ввода и вывода в C++: практическое руководство
  3. Ввод-вывод в C: scanf() и printf() — подробное руководство
  4. Ввод и вывод в Java: печать, чтение и форматирование данных
  5. Оператор switch-case в C++: синтаксис, применение и практические примеры
  6. Обработка исключений в C++: практические примеры try, catch, throw
  7. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  8. Структуры (struct) в C++: объяснение с практическим примером
  9. D-защелки: проектирование, принцип работы и ключевые отличия от триггеров
  10. Ввод-вывод в C: stdio.h, потоки stdin/stdout/stderr, функции getchar/putchar, gets/puts, scanf/printf