Для вывода данных используеся оператор <<
. Этот опрератор определен для всех встроенных типов C++ и некоторых классов, входящих в стандартную библиотеку. Для вывода перевода строки можно использовать специальный объект endl
.
Примеры использования потока вывода:
Будет выведено:
Также оператор <<
можно использовать и со своими классами, определив для них перегруженный оператор. Например, для структуры Book
перегруженный оператор может выглядеть так:
Некоторые методы класса ostream:
put(char c)
- записать символ с в потокwrite(const char* s, streamsize n)
- записать первые n элементов массива s в поток (streamsize представляет целое число со знаком, например, int)flush()
- записать значение из буфераclose()
- закрытие потокаДля ввода используется оператор >>
. Он также определен для всех встроенных типов и некоторых классов стандартной библиотеки.
Оператор >>
также можно определить для своих классов:
Некоторые методы класса istream:
get()
- считать следующий символget(char *buf, streamsize n)
- считать максимум n-1 символ и поместить в массив bufget(char *buf, streamsize n, char delim)
- считывание символов до символа-разделителя delim (разделитель не считывается и остается в потоке)getline(char *buf, streamsize n)
getline(char *buf, streamsize n, char delim)
peek()
- считывает следующий символ, но оставляет его в потокеignore(streamsize n = 1, int delim = EOF)
- извлекает символы из потока до тех пор, пока их число меньше n или пока не встретился символ delimputback(char c)
- добавляет символ с в текущую позицию потокаunget()
- возвращает последний считанный символ в потокДля управления форматом вывода можно устанавливать специальные флаги потока методом setf(ios_base::fmtflags f)
. Но удобнее пользоваться манипуляторами - специальными функциями, реализованными в заголочных файлах <istream>
, <ostream>
(они по умолчанию включены в <iostream>
) и <iomanip>
.
Основные манипуляторы ввода/вывода:
boolalpha
- стороковое представление логических значенийnoboolalpha
- числовое представление логических значенийВыведет:
showbase
- включает вывод 0 перед восьмеричными и 0x перед шестнадцатеричными числамиnoshowbase
- выключает вывод 0 и 0xdec
- вывод чисел в десятичной системе счисленияoct
- в восьмеричнойhex
- в шестнадцатеричнойuppercase
- заглавные буквы в записи шестнадцатеричных чисел и чисел с плавающей запятой в научной записиnouppercase
- строчные буквы в записи чиселВыведет:
skipws
- пропуск символов-разделителей (' ', '\t', '\n', и т.п.
)noskipws
- выключение пропуска разделителейsetw(int n)
- определяет минимальное количество символов, которые выведутся следующей операцией выводаsetfill(char c)
- символ-заполнительleft
- выравнивание поля по левому краюright
- выравнивание поля по правому краюinternal
- выравнивание поля по ширинеВыведет:
scientific
- научная запись для чисел с плавающей запятойfixed
- фиксированная точность для чисел с плавающей запятойsetprecision
- точность вывода чисел (по умолчанию равна 6)Выведет:
endl
- запись \n
и очистка буфераends
- запись \0
flush
- очистка буфера потокаws
- прочитать и проигнорировать символы-разделителиКаждый поток istream
или ostream
имеет связанное с ним состояние.
Методы проверки состояния:
good()
- можно выполнить следующую операциюeof()
- конец потокаfail()
- следующая операция не выполнитсяbad()
- поток испорченДля реализации стандартного ввода/вывода в библиотеку C++ включен заголовочный файл iostream
, содержащий следующие предопределенные объекты потоков:
Файловые потоки расположены в заголовочном файле <fstream>
. ifstream
- поток ввода, ofstream
- поток вывода.
Имя файла передается потоку либо в конструкторе, либо через вызов метода open
.
Строковые потоки расположены в заголовочном файле <sstream>
.
istringstream
- поток ввода. Строка передается потоку в конструкторе.
ostringstream
- поток вывода. Строку-результат возвращает метод str()
.
Выведет: