Потокове введення

Потокове введення досягається при використанні змінної класу istream або iostream. Може застосовуватися з визначеним вхідним потоком cin чи із вхідним потоком, визначеним користувачем.

6. Операція витягу

Операція витягу читає послідовність символів із зазначеного потоку. Проміжки між символами видаляються. Операція витягу – це перевантажена операція >>. Вона визначена для всіх простих типів і покажчика на char.

 

int age, weight;

cout << “Enter age and weight: “ << flush;

cin >> age >> weight; // зчитує вік, а потім вагу

 

Операція витягу має ненульове значення доти, поки не зустріне символ кінця файлу (використовуючи операцію перетворення operator void*()).

 

char c;

while (cin >>c) // копіювати непусті символи з cin в cout

cout << c;

 

Операція витягу встановлює failbit, якщо символи, зчитувані з потоку, не мають необхідний тип. Установлює badbit, якщо при читанні відбулася помилка. Для класів може бути перевантажена тим же способом, що й операція вставки.

 

int get();

– витягає й повертає один символ із вхідного потоку, включаючи символи порожніх проміжків (пробіл, табуляція й т.п.). повертає значення EOF, якщо досягнуто кінець файлу (ніколи не встановлює failbit).

 

int c;

while((c = cin.get()) != EOF)

cout.put(c);

 

istream& get(char&);

istream& get(unsigned char&);

– витягає й повертає один символ із вхідного потоку, включаючи символи порожніх проміжків. Має ненульове значення доти, поки не досягнуто кінець файлу.

 

char c;

while(cin.get(c)) cout.put(c);

 

istream& get(char* buf, int limit, char delim = 'n' );

istream& get(unsigned char* buf, int limit, char delim = 'n' );

– читає символи з потоку доти, поки не буде зчитано зазначену кількість символів або поки не буде зчитано символ-обмежник. Обмежник не включається в зчитану послідовність символів і залишається в потоці.

 

istream& getline(char* buf, int limit, char delim = 'n' );

– читає символи з потоку доти, поки не буде зчитано зазначену кількість символів чи поки не буде зчитано символ-обмежник. Обмежник не включається в зчитану послідовність символів.

 

istream& read(char* buf, int count);

istream& read(unsigned char* buf, int count);

– читає рядок символів із потоку.

 

const int bufSize = 2048;

char buf[bufSize];

// ...

cin.read(buf, bufSize);

 

Якщо кінець файлу досягнуто до того, як було зчитано зазначену кількість символів, то встановлюється failbit.

 

istream& ignore(int limit = 1, int delim = EOF);

– видаляє з потоку зазначену кількість символів, поки не зустрінеться символ-обмежник.

 

int gcount();

– повертає кількість символів, прочитаних із потоку під час виконання останньої операції неформатованого введення.

 

istream& putback(char);

– поміщає символ назад у потік. Як правило, між успішними викликами get() у потік може бути повернутий один символ. Символ, що поміщається назад у потік, повинен бути символом, що був зчитаний із потоку, в іншому випадку результат непередбачений.

 

int peek();

– повертає наступний символ, що буде зчитаний з потоку, фактично не витягаючи його з потоку.

 

istream& seekg(streampos, seek_dir = ios::beg);

– переміщає позицію покажчика читання у файлі. Streampos – це значення цілого типу, а seek_dir – це точка відліку, від якої відраховується значення нової позиції: початок файлу, поточна позиція або кінець файлу.

 

file.seekg(i * 100);

file.seekg(100, ios::cur); // вперед на 100 байт

file.seekg(0, ios::end); // останній символ

 

streampos tellg();

– повертає поточну позицію покажчика читання у файлі потоку в байтах. Streampos – це значення цілого типу.

streampos mark = myFile.tellg();

 

istream& ws(istream&);

– витягає й видаляє символи порожніх проміжків із зазначеного потоку.

 

cin >> ws; // видаляє лідируючі пробіли.