C++ Базовый ввод/вывод: пример Cout, Cin, Cerr

⚡ Умное резюме

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

  • 🔘 Потоки: Ввод и вывод данных осуществляются в виде последовательностей байтов, называемых потоками, перемещая данные между оперативной памятью и устройствами.
  • 📥 Заголовочные файлы: Библиотеки iostream, iomanip и fstream определяют объекты и манипуляторы, используемые для базового ввода и вывода.
  • 🇧🇷 cout и cin: Объект cout выводит данные с помощью оператора вставки, а cin считывает значения с помощью оператора ex.tracоператор связи.
  • ⚠️ cerr и clog: Оба сообщения сообщают об ошибках, однако cerr остается без буферизации для немедленного отображения, в то время как clog сначала буферизует сообщения.
  • 🇧🇷 Обработка ошибок: Проверки на успешность, неуспешность, сбой и конец состояния считывают состояние потока, поэтому сбои в работе безопасно выявляются.
  • 🤖 Помощь ИИ: Искусственный интеллект, используемый в качестве помощника при программировании, например, GitHub Copilot, генерирует шаблонный код для функций cin и cout на основе короткого комментария или имени функции.

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

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

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

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

Типы потоков

  • Входной поток: Это тип потока, в котором байты передаются из устройства, такого как клавиатура, в основную память.
  • Выходной поток: Это тип потока, в котором байты передаются в противоположном направлении, то есть из основной памяти затем на устройство, такое как экран дисплея.

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

C++ потоки работают следующим образом:

  1. Сначала поток инициализируется правильным типом.
  2. Далее следует указать, где будут происходить операции ввода-вывода, используя указатели get/put.
  3. Достигнув нужного места в потоке, вы можете выполнять задачи ввода и вывода с помощью операторов >> и << соответственно.

Таблица функций

Ниже приведены функции, представленные в заголовочном файле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;
}

Выход:

std :: cout

Вот скриншот кода:

std :: cout

Code Объяснение:

  1. Включите файл заголовка iostream, в котором определен объект cout.
  2. Включите пространство имен std, чтобы нам не приходилось вызывать его при использовании его классов.
  3. Вызовите функцию main(). Программный код должен быть добавлен в его тело. Открывающая фигурная скобка { отмечает начало тела.
  4. Создайте символьную переменную с именем welcome для хранения строки "Welcome to". Guru99.
  5. Выведите значение строки Welcome на консоль. Конец - это C++ ключевое слово, означающее конечную строку. Он перемещает курсор, чтобы начать печать текста на следующей строке.
  6. Программа должна вернуть значение после успешного выполнения.
  7. Конец тела функции 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;
}

Выход:

std :: cin

Вот скриншот кода:

std :: cin

Code Объяснение:

  1. Включите заголовочный файл iostream в нашу программу. Объект cin определен в этом заголовочном файле.
  2. Включите пространство имен std для использования его классов. Вам не придется вызывать std при использовании его классов.
  3. Вызовите функцию main(). Программный код должен быть добавлен в его тело.
  4. Начало тела программы.
  5. Объявить целочисленная переменная названный номер.
  6. Распечатайте на экране сообщение, предлагающее пользователю ввести номер.
  7. Считайте с клавиатуры значение, введенное пользователем на консоли.
  8. Распечатайте значение, прочитанное выше, на консоли вместе с другим текстом.
  9. Программа должна вернуть значение, если она выполняется успешно.
  10. Конец тела основной функции.

std :: cerr

Объект cerr формирует стандартный поток ошибок для вывода ошибок в C++. Cerr — это экземпляр класса ostream. Объект cerr не буферизован. Это означает, что он используется, когда сообщение об ошибке должно быть отображено немедленно.

Поскольку он не буферизован, он не сохраняет сообщения об ошибках для последующего отображения. Он используется вместе с оператором вставки потока (<<).

Пример

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

Выход:

std :: cerr

Вот скриншот кода:

std :: cerr

Code Объяснение:

  1. Включите файл заголовка iostream, в котором определен объект cerr.
  2. Включите пространство имен std, чтобы нам не приходилось вызывать его при использовании его классов.
  3. Вызовите функцию main(). Логика программы должна быть добавлена ​​в ее тело. Открывающая фигурная скобка отмечает начало тела функции.
  4. Используйте объект cerr, чтобы вывести сообщение об ошибке на консоль.
  5. Программа должна вернуть значение после успешного выполнения.
  6. Конец тела основной функции.

станд:: засорить

Объект clog является экземпляром класса ostream. Он используется для отображения ошибок на стандартном дисплее монитора. Он похож на объект cerr, но буферизован. Поскольку он буферизован, он сохраняет сообщение об ошибке в буфере до тех пор, пока буфер не будет заполнен/очищен. Он используется вместе с оператором вставки потока (<<).

Пример

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

Выход:

станд:: засорить

Вот скриншот кода:

станд:: засорить

Code Объяснение:

  1. Включая заголовочный файл iostream, в котором определен объект засорения.
  2. Включаем пространство имен std, чтобы мы могли использовать его классы, не вызывая его.
  3. Вызов функции main(). Логика программы должна быть добавлена ​​в ее тело. { отмечает начало тела функции.
  4. Используйте объект clog, чтобы вывести сообщение об ошибке на стандартный вывод — монитор.
  5. Программа должна вернуть значение после успешного завершения.
  6. Конец тела функции 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;
}

Часто задаваемые вопросы (FAQ)

Объект cout является типобезопасным и использует оператор вставки, поэтому он автоматически определяет тип каждого значения. Функция printf в C полагается на спецификаторы формата, такие как %d, которые должны соответствовать аргументам вручную.

ЭксtracОператор `tion` останавливается на первом пробеле, поэтому `cin` считывает только одно слово. Чтобы захватить всю строку с пробелами, вызовите `getline(cin, variable)`, которая считывает данные до символа новой строки.

Оба оператора начинают новую строку, но endl также каждый раз очищает буфер вывода, что может замедлить работу циклов. Предпочтительнее использовать простой перевод строки, а endl использовать только в тех случаях, когда очистка буфера должна быть произведена немедленно.

Объекты cin, cout, cerr и clog находятся в пространстве имен std. Использование пространства имен std позволяет писать cout вместо std::cout. В больших проектах часто используется явный префикс std во избежание конфликтов.

Включите заголовок iomanip и используйте манипуляторы с cout. Манипулятор setw резервирует ширину поля, а setprecision задает количество отображаемых цифр, форматируя числа и столбцы без изменения сохраненных значений.

Да. Поскольку cout и cerr — это отдельные потоки, оболочка может перенаправлять обычный вывод в файл, в то время как ошибки всё ещё будут отображаться на экране. В коде rdbuf может указывать потоком на другой буфер.

Да. Искусственный интеллект, помогающий программистам, считывает комментарий или имя функции и генерирует операторы cin и cout, а также включаемый файл iostream и отформатированную командную строку. RevАнализ логики генерируемого потока данных на предмет граничных случаев остается целесообразным.

Да. Второй пилот GitHub Выполняет форматирование cout, циклы проверки cin и проверки ошибок cerr по мере ввода текста. Сейчас 2026 год. C++ Функция интеллектуального анализа кода добавляет распознавание семантических символов, поэтому предложения для нескольких файлов остаются согласованными.

Подведем итог этой публикации следующим образом: