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

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

Стандартная библиотека С++ включает в себя библиотеку, предназначенную для работы с потоками данных – 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 возвращается при ошибке чтения-записи.                                           |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sweethome.gitbook.io/advanced-cpp/standard_library/input_output.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
