Основы ввода/вывода в C++

Привет, будущие программисты на C++! Сегодня мы погружаемся в увлекательный мир ввода и вывода в C++. Не волнуйтесь, если вы раньше не писали ни одной строчки кода – мы начнем с самого начала и постепенно развиваться. К концу этого урока вы удивитесь, как много можно сделать всего лишь несколькими строчками кода на C++!

C++ Basic Input/Output

Хедер-файлы библиотеки ввода/вывода

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

Начнем с простого примера:

#include <iostream>

int main() {
// Ваш код будет здесь
return 0;
}

Это базовая структура программы на C++. Строка #include <iostream> указывает компилятору включить библиотеку iostream, что дает нам доступ к функциональности ввода и вывода.

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

Теперь давайте научимся выводить текст на экран. В C++ мы используем cout (произносится "си-аут") для отправки вывода в консоль.

#include <iostream>
using namespace std;

int main() {
cout << "Привет, мир!";
return 0;
}

Когда вы запустите эту программу, она выведет "Привет, мир!" на экран. Разберем это:

  • cout — это стандартный выходной поток.
  • Оператор << используется для отправки данных в cout.
  • Текст внутри двойных кавычек называется строковой литералом.

Вы также можете использовать cout для вывода нескольких элементов:

cout << "Мое имя " << "Алиса" << " и мне " << 25 << " лет.";

Это выведет: "Мое имя Алиса и мне 25 лет."

Добавление новой строки

Чтобы перейти на новую строку после вывода, вы можете использовать манипулятор endl или символ \n:

cout << "Первая строка" << endl;
cout << "Вторая строка\n";
cout << "Третья строка" << '\n';

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

Теперь, когда мы можем выводить текст, давайте научимся получать ввод от пользователя. Для этого мы используем cin (произносится "си-ин").

#include <iostream>
using namespace std;

int main() {
int age;
cout << "Сколько вам лет? ";
cin >> age;
cout << "Вам " << age << " лет!" << endl;
return 0;
}

В этом примере:

  • Мы объявляем целочисленную переменную age для хранения ввода пользователя.
  • Мы используем cout для запроса возраста пользователя.
  • cin >> age читает целое число от пользователя и сохраняет его в переменную age.
  • Наконец, мы используем cout для отображения результата.

Вы также можете прочитать несколько вводов:

string name;
int age;
cout << "Введите ваше имя и возраст: ";
cin >> name >> age;
cout << "Привет, " << name << "! Вам " << age << " лет." << endl;

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

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

#include <iostream>
using namespace std;

int main() {
int denominator = 0;
if (denominator == 0) {
cerr << "Ошибка: нельзя делить на ноль!" << endl;
}
return 0;
}

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

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

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

#include <iostream>
using namespace std;

int main() {
clog << "Это сообщение для журнала." << endl;
return 0;
}

На практике clog используется не так часто, как cout и cerr, но полезно знать, что он существует.

Форматирование вывода

Теперь, когда мы покрыли основы, давайте рассмотрим несколько способов форматирования нашего вывода, чтобы он выглядел лучше.

Установка ширины поля

Вы можете использовать манипулятор setw для установки ширины поля:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
cout << setw(10) << "Имя" << setw(5) << "Возраст" << endl;
cout << setw(10) << "Алиса" << setw(5) << 25 << endl;
cout << setw(10) << "Боб" << setw(5) << 30 << endl;
return 0;
}

Это произведет красиво выровненный вывод:

Имя  Возраст
Алиса   25
Боб   30

Точность для чисел с плавающей запятой

Для чисел с плавающей запятой вы можете контролировать точность с помощью setprecision:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
double pi = 3.14159265359;
cout << "Обычное pi: " << pi << endl;
cout << "Pi с точностью до 4 знаков: " << fixed << setprecision(4) << pi << endl;
return 0;
}

Вывод:

Обычное pi: 3.14159
Pi с точностью до 4 знаков: 3.1416

Резюме потоков ввода/вывода и манипуляторов

Вот удобная таблица, подводящая итог потокам ввода/вывода и манипуляторам, которые мы изучили:

Объект/Манипулятор Описание Пример
cout Стандартный выходной поток cout << "Привет";
cin Стандартный входной поток cin >> variable;
cerr Стандартный поток ошибок cerr << "Ошибка!";
clog Стандартный поток журналирования clog << "Сообщение для журнала";
endl Конец строки cout << "Привет" << endl;
setw Установка ширины поля cout << setw(10) << "Имя";
setprecision Установка точности для чисел с плавающей запятой cout << setprecision(2) << 3.14159;

И это все! Вы только что изучили основы ввода и вывода в C++. Помните, что практика совершенства, поэтому не стесняйтесь экспериментировать с этими концепциями. Попробуйте сочетать их различными способами, и скоро вы сможете писать сложные программы с легкостью.

Счастливого кодирования, и чтобы ваши выводы всегда соответствовали ожиданиям, а вводы всегда были валидными!

Credits: Image by storyset