Программирование >>  Процедурные приложения 

1 ... 80 81 82 [ 83 ] 84 85 86 ... 150


seekpos П

1еремещает указатель области ввода или вывода на указанную позицию относительно начала отока

overflow С

)чищает область вывода

underflow Е

хли область ввода пуста, заполняет ее данными из источника

pbackfail В

!ызывается функцией sputbackc() в случае неудачной попытки вернуться назад на один имвол

Таблица 15.7. Защищенные фугкции класса streambuf

Защищенная функция

Описание

base

Возвращает указатель на начало области резервирования

ebuf

Возвращает указатель на конец области резервирования

blen

Возвращает размер области резервирования

phase

Возвращает указатель на начало области вывода

pptr

Возвращает значение указателя области вывода

epptr

Возвращает указатель на конец области ввода

eback

Возвращает указатель на начало области ввода

gptr

Возвращает значение указателя области ввода

egptr

Возвращает указатель на конец области вывода

setp

Задает значения указателей, связанных с областью вывода

setg

Задает значения указателей, связанных с областью ввода

pbump

Перемещает указатель области вывода на указанное число байтов относительно текущей позиции

gbump

Перемещает указатель области ввода на указанное число байтов относительно текущей позиции

setb

Задает значения указателей, связанных с областью резервирования

unbuffered

Задает или возвращает значение переменной, определяющей состояние буфера

allocate

Вызывает виртуальную функцию deallocate для создания области резервирования

deallocate

Выделяет память для области резервирования (виртуальная функция)

Классы файловых потоков, такие как ifstream, ofstream и fstream, содержат встроенный объект класса filebuf, который вызывает низкоуровневые системные функции для управления буферизованным файловым вводом-выводом. Для объектов класса filebuf области ввода и вывода, а также указатели текущей позиции чтения и записи всегда равны друг другу. Функции этого класса перечислены в табл. 15.8.

Таблица 15.8.Функции класса filebuf

Функция

Описание

open

Открывает файл, связывая с ним объект класса filebuf

close

Закрывает файл, выталкивая все содержимое области вывода

setmode

Задает режим доступа к файлу: двоичный (константа filebuf:: binary) или текстовый (константа filebuf: :text)

attach

Связывает указанный открытый файл с объектом класса filebuf

Возвращает дескриптор файла

s open

Проверяет, открыт ли файл, связанный с потоком

В следующей программе создаются два файловых объекта: fbMylnputBuf и fbMyOutputBuf. Оба они открываются в текстовом режиме с помощью функции open(): первый - для чтения, второй - для записи. Если при открытии файлов не возникнет никаких ошибок, то каждый из них связывается с соответствующим объектом класса istream и ostream. Далее в цикле while символы читаются из файла fbMylnputBuf с помощью функции get() класса istream и записываются в файл fbMyOutputBuf с помощью функции put() класса ostream. Подсчет числа строк осуществляется с помощью выражения

iLineCount +=

(ch == \n);

Когда в поток помещается символ \n, выражение в скобках возвращает 1 и счетчик iLineCount увеличивается на единицу, в противном случае он остается неизменным.



Оба файла закрываются с помощью функции close().

filebuf.cpp

Эта программа на языке C++ демонстрирует, как работать

с объектами класса filebuf.

#include <f stream. h>

t#include <process.h>

содержит прототип функции exit()

void main (void)

char ch;

int iLineCount = 0;

filebuf fbMylnputBuf, fbMyOutputBuf;

fbMylnputBuf .open ( FILEBUF.CPP , ios::in); if (fbMylnputBuf .is open()== 0) (

cerr<< Невозможно открыть файл для чтения

exit (1);

istream is(SfbMylnputBuf) ;

fbMyOutputBuf.open( output.dat ,ios::out); if(fbMyOutputBuf.is open()

== 0) {

cerr<< Невозможно открыть файл для записи ; exit(2); }

ostream os(SfbMyOutputBuf);

while (is) {

is.get(ch);

os.put(ch);

iLineCount += (ch== \n);

bMylnputBuf. close (); fbMyOutputBuf.close();

cout << Файл содержит << iLineCount << строк ;

Cтроковые буферы

Класс strstreambuf управляет символьным буфером, расположенным в динамической памяти.

Несколько примеров форматного вывода данных

В первом примере на экран выводится список факториалов чисел от 1 до 25 с выравниванием влево:

fact.cpp

Эта программа на языке C++ выводит список факториалов чисел от 1 до 25.

#include <iostream.h> main ()

double number = 1.0,factorial = 1.0;

cout .precision (0); 0 цифрпослезапятой

cout .setf (ios:: left) ; выравнивание влево



cout .setf (ios:: fixed) ; фиксированн1й формат

(безэкспоненты)

for(int i << 0; i < 25;i++) {

factorial *= number++;

cout << factorial << endl; }

return(0);

Результаты работы программы будут такими:

24 120

5040

40320 362880 3628800 39916800

479001600

6227020800

87178291200

1307674368000

20922789888000

355687428096000

6402373705728000

121645100408832000

2432902008176640000

51090942171709440000

1124000727777607680000

25852016738884976640000

620448401733239439360000

15511210043330985984000000

Во втором примере на экран выводится таблица квадратов и квадратных корней целых чисел от 1 до 15.

sqrt.cpp

Эта программа на языке C++ строит таблицу квадратов и квадратных

корней чисел от 1 до 15.

#include <iostream.h> # include <math.h> main () {

double number =1.0,square, sqroot;

cout << Число\tKвaдрат\t\tKвадратнIЙ корень\n ;

cout << \n ;

cout .setf (ios:: fixed) ; фиксированный формат ( без экспоненты) for(int i = 1; i < 16;i++) {

square = number * number; вычисление квадрата числа sqroot = sqrt(number); нахождение корня числа cout.fill(0); заполнение недостающих позиций нулями cout.width(2); ширина столбца - минимум 2 символа cout.precision(0); 0 цифрпосле запятой



1 ... 80 81 82 [ 83 ] 84 85 86 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика