
- •Лабораторная работа №3. Работа с файлами через потоки. Теоретическая часть
- •Открытие и закрытие файлов
- •Класс istream
- •Функции get, getline и read
- •Функция возвращения
- •Позиционирование потока
- •Класс ostream
- •Функции вывода put и write
- •Функции класса filebuf
- •Функции класса streambuf
- •Функции класса strstreambuf
- •Определение состояния потока
- •Контрольные вопросы:
- •Порядок выполнения лабораторной работы:
- •Практическая часть. Индивидуальные задания.
Класс 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 удаляет.