|
Программирование >> Процедурные приложения
Классы файловых потоков, такие как ifstream, ofstream и fstream, содержат встроенный объект класса filebuf, который вызывает низкоуровневые системные функции для управления буферизованным файловым вводом-выводом. Для объектов класса filebuf области ввода и вывода, а также указатели текущей позиции чтения и записи всегда равны друг другу. Функции этого класса перечислены в табл. 15.8.
В следующей программе создаются два файловых объекта: 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 цифрпосле запятой
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |