> For the complete documentation index, see [llms.txt](https://sweethome.gitbook.io/advanced-cpp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sweethome.gitbook.io/advanced-cpp/standard_library/input_output.md).

# Ввод-вывод данных

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

Стандартная библиотека С++ включает в себя библиотеку, предназначенную для работы с потоками данных – iostream. Эта библиотека предоставляет следующие элементы:

* Базовые шаблонные классы. Эти классы предлагают большую часть функциональности библиотеки, независящую от типов данных. В качестве параметров шаблонов классов выступают тип символов (char\_type) и дополнительные свойства типов символов (traits).
* Инстанциированные шаблонные классы – в первом в качестве параметра типа символов используется тип char, во втором – wchar\_t.
* Стандартные объекты. Эти объекты представляют собой стандартные потоки ввода/вывода. Они представлены такими объектами как cin, cout, cerr, clog (а также wcin, wcout, wcerr и wclog)
* Манипуляторы – глобальные функции, используемые для управления потоком. Они могут быть использованы совместно с операторами извлечения из потока (<<) и выталкивания в поток (>>).

Наиболее часто из библиотеки iostream используются стандартные объекты, а также классы предназначенные для работы с файлами и строками.

* **cin** - объект класса istream, представляющий собой стандартный поток ввода данных. По умолчанию данные считываются с клавиатуры. Для считывания данных из входного потока обычно используется оператор >>. В этом случае данные считываются в указанную переменную до пробельного символа. Объявлен в заголовочном файле *iostream*.
* **cout** - объект класса ostream, представляющий собой стандартный поток вывода данных. По умолчанию данные выводятся на экран. Для вывода данных на экран обычно используется оператор <<. Объявлен в заголовочном файле *iostream*.
* **ifstream** - класс, предназначенный для чтения данных из файла. Объявлен в заголовочном файле f\_stream\_.
* **ofstream** - класс, предназначенный для запись данных в файл. Объявлен в заголовочном файле f\_stream\_.
* **istringstream** - класс, предназначенный для чтения данных из строки. Объявлен в заголовочном файле *sstream*.
* **ostringstream** - класс, предназначенный для записи данных в файл. Объявлен в заголовочном файле *sstream*.

### методы, определенные в классе istream (ifstream)

| **метод**       | **синтаксис**                                                                                                                                                                                                 | **пояснение**                                                                                                                |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **operator >>** |                                                                                                                                                                                                               | оператор чтения данных из входного потока                                                                                    |
| **get**         | int get(); istream& get ( char& c ); istream& get ( char\* s, streamsize n ); istream& get ( char\* s, streamsize n, char delim ); istream& get ( streambuf& sb); istream& get ( streambuf& sb, char delim ); | считывание символа (символов) из потока.                                                                                     |
| **getline**     | istream& getline (char\* s, streamsize n); istream& getline (char\* s, streamsize n, char delim );                                                                                                            | чтение набора символов. символы читаются из потока до конца строки (символ '\n') или пока их количество не станет равно n.   |
| **peek**        | int peek ( );                                                                                                                                                                                                 | читает символ из потока, но не извлекает его.                                                                                |
| **read**        | istream& read ( char\* s, streamsize n );                                                                                                                                                                     | читает блок данных из потока длины n в буфер s. Считанные данные не проверяются на наличие конца строки.                     |
| **good**        | bool good ( ) const;                                                                                                                                                                                          | Проверка на состояние потока. Значение true возвращается при отсутствии ошибок потока.                                       |
| **eof**         | bool eof ( ) const;                                                                                                                                                                                           | Проверка на состояние потока. Значение true возвращается при достижении конца потока.                                        |
| **fail**        | bool fail ( ) const;                                                                                                                                                                                          | Проверка на состояние потока. Значение true возвращается при ошибке чтения-записи и логической ошибке операции ввода/вывода. |
| **bad**         | bool bad ( ) const;                                                                                                                                                                                           | Проверка на состояние потока. Значение true возвращается при ошибке чтения-записи.                                           |
