Учебник по информатике и математике
Темы
Алгоритмы
C++
Основы языка
Python
Ввод и вывод в C++
Оглавление:
Почти любая программа на C++ начинается с чтения данных и заканчивается выводом ответа. Для этого в стандартной библиотеке есть потоки: cin читает то, что ввёл пользователь, cout печатает на экран.
Первая программа
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
Строка #include <iostream> подключает библиотеку потоков, using namespace std; позволяет писать cin вместо std::cin. Стрелки показывают направление данных: >> — из потока в переменную, << — из выражения в поток.
Ключевая идея:
cin >> a >> bчитает два числа, разделённых любым количеством пробелов или переводов строки. Как именно пользователь их набрал — в одну строку или в две — не важно.
Вывод нескольких значений
В одну цепочку можно собрать сколько угодно выражений и строк:
int x = 7;
cout << "x = " << x << ", x^2 = " << x * x << "\n";
// x = 7, x^2 = 49
endl и "\n" оба переводят строку, но endl ещё и принудительно сбрасывает буфер вывода. Когда строк выводится много, это заметно замедляет программу, поэтому в олимпиадных задачах лучше писать "\n".
Чтение строк
cin >> s для строки string s читает одно слово — до первого пробела. Чтобы прочитать строку целиком, с пробелами, используй getline:
#include <iostream>
#include <string>
using namespace std;
int main() {
string line;
getline(cin, line);
cout << "Вы ввели: " << line << "\n";
}
Частая ошибка: Если перед
getlineуже было чтение черезcin >>, в потоке остаётся символ перевода строки, иgetlineвернёт пустую строку. Между ними нуженcin.ignore().
Дробные числа и точность
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double pi = 3.14159265;
cout << fixed << setprecision(2) << pi << "\n"; // 3.14
}
fixed включает запись с фиксированным числом знаков после запятой, setprecision(2) задаёт их количество. Оба живут в заголовке <iomanip>.
Ускорение ввода-вывода
По умолчанию cin и cout синхронизированы с функциями языка C (scanf, printf), и это делает их медленнее. В задачах, где читаются сотни тысяч чисел, в начале main добавляют две строки:
ios::sync_with_stdio(false);
cin.tie(nullptr);
После этого нельзя смешивать cin/cout с scanf/printf в одной программе.
Совет: Чтобы читать неизвестное заранее количество чисел до конца ввода, используй цикл
while (cin >> x) { ... }: он остановится, когда данные закончатся.
Заметка: Если по условию данные лежат в файлах, потоки заменяют на
ifstreamиofstreamиз заголовка<fstream>, а сам код чтения и записи остаётся тем же.
Проверь себя
Что напечатает cout << 7 / 2 << «n»; если оба числа целые?
Какую функцию нужно использовать, чтобы прочитать из ввода строку целиком, вместе с пробелами?
Сопоставь инструмент и его назначение.
cin >> x
ускорить ввод и вывод
cout << x
прочитать одно значение
setprecision(3)
три знака после запятой
ios::sync_with_stdio(false)
вывести значение