Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
147.46 Кб
Скачать

Класс istream

Функции управления потоковым вводом сосредоточены в классе istream. С каждым из объектов этого класса и его производных связан объект класса streambuf. Функции класса istream, доступные его потомкам, перечислены в таблице.

Функция

Назначение

ipfx

Вызывается перед операцией чтения для проверки наличия ошибок в потоке

isfx

Вызывается после каждой операции чтения

get

Извлекает из потока требуемое число символов; если указан символ-ограничитель, он не извлекается

getline

Извлекает из потока требуемое число символов; если указан символ-ограничитель, он извлекается, но не сохраняется в буфере

read

Извлекает из потока требуемое число байтов; применяется при работе с двоичными потоками

istream& istream::ignore (int n, int d);

Выбрасывает из потока требуемое число символов вплоть до символа-ограничителя

int istream::peek();

Возвращает значение очередного символа, не извлекая его из потока

int istream::gcount()

Определяет число символов, извлеченных из потока во время последней операции чтения

eatwhite

Извлекает из потока ведущие пробельные символы; аналогичное действие выполняет манипулятор ws

istream& istream::putback

(char ch);

Возвращает в поток символы, извлеченные из него во время последней операции чтения

sync

Синхронизирует внутренний буфер потока с внешним источником символьных данных

istream& istream::seekg (streampos);

istream& istream::seekg (streampoff,ios::seek_dir);

Перемещает маркер, обозначающий текущую позицию чтения, на

требуемую позицию в потоке

streampos istream::tellg()

Возвращает позицию маркера чтения

Функции get, getline и read

Следующий вариант get позволяет управлять числом извлекаемых символов, их размещением и оконечным символом:

istream& istream::get(char *buf, int max, int term[='\n']);

Эта функция считывает символы из входного потока в символьный массив buf до тех пор, пока не будет считано max символов, либо пока не встретится символ, заданный term, либо пока не встретится конец файла, в зависимости оттого, что произойдет раньше. Завершающий пустой символ добавляется автоматически. По умолчанию терминатором (который не обязательно задавать) является символ новой строки ('\n'). Сам терминатор в массив buf не считывается и из istream не удаляется. Массив buf должен иметь размер как минимум max символов.

Пример:

#include <iostream.h>

#define NUMCHAR 45

void main()

{ char name[NUMCHAR+1];

cout<<"Введите ваше имя и фамилию:\n";

cin.get(name,NUMCHAR);

cout<<"\nСпасибо,"<<name;

}

В функции cin.get() первый аргумент – имя переменной, принимающей данные; второй – максимальное число вводимых символов: третий (необязательный) – символ, служащий признаком окончания ввода (по умолчанию используется символ \n). Функция cin.get() считывает все символы в строке, включая пробелы и знаки табуляции, пока не будет прочитано указанное число символов или не встретится символ-ограничитель. Так, например, если в качестве ограничителя используется символ ’*’, то необходимо записать оператор ввода следующим образом

cin.get(name,NUMCHAR,’*’);

Функция

istream& istream::getline(char *buf, int max, int term);

считывает символы из входного потока в символьный массив buf до тех пор, пока не будет считано max символов, либо пока не встретится символ, заданный term, либо пока не встретится конец файла, в зависимости оттого, что произойдет раньше. Завершающий пустой символ добавляется автоматически. По умолчанию терминатором (который не обязательно задавать) является символ новой строки ('\n'). В отличие от функции get функция getline терминатор в массив buf считывает и из istream удаляет.