Содержание
-
Организация ввода-вывода в С++
-
Все средства ввода-вывода в языке C++ реализованы в виде библиотечныхперегруженных операций > (извлечения и вставки), манипуляторов, классов потоков, констант, глобальных переменных, функций и типов данных, находящихся в составе библиотеки управления потоками. Stream-библиотека выполнена в виде иерархии классов, которые описаны в нескольких заголовочных файлах. Подобно тому, как в файле iostream.h объявлены базовые средства ввода-вывода, обеспечивающие обмен данными между программой и стандартными устройствами ввода-вывода через потоки(streams), в файле fstream.hстановятся доступны средства обмена данными между программой и файлами через потоки.
-
Основные варианты организации ввода-вывода
К основным вариантам организации ввода-вывода относятся: консольный форматированный ввод-вывод базовых типов; файловый форматированный ввод-вывод базовых типов; файловый символьный ввод-вывод; файловый строко-ориентированный ввод-вывод; форматированный обмен данными базовых типов со строкой в памяти. Консольный форматированный ввод-вывод базовых типов осуществляется с помощью стандартных потоков cinи cout.
-
Файловый ввод-вывод
Для обмена данными с файлами, размещенными на дисках, используются три стандартных класса файловых потоков: ifstream, ofstreamи iofstream. Для того чтобы начать работу с файлами, расположенными на логических дисках, необходимо «создать» соответствующие потоки.
-
Процесс работы с файлом через потоки можно разбить на 4 этапа:
Создание потока (объявление переменной). Связывание потока с файлом и открытие (open) файла для работы в определенном режиме. Обмен данными с файлом через поток: запись в поток; чтение из потока; управление состоянием потока. Разрыв связи потока с файлом: освобождение буфера («флэширование» —flush),закрытие (close) файла и разрыв его связи с потоком. При выполнении пунктов 2, 3, 4 следует контролировать наличие ошибок ввода-вывода средствами языка C++.
-
При работе с потоками и файлами различают буферизированный (с использование буфера) и небуферизированный (без использования буферов) ввод-вывод. Буфер (buffer) представляет собой область оперативной памяти для промежуточного хранения данных, передаваемых между программой и внешним устройством. Вывод данных в поток с буфером приводит к выводу этих данных в соответствующий файл только после заполнения буфера. Вывод данных в небуферизованный поток приводит к немедленному выводу в файл. Символы извлекаются из потока методом getline() и помещаются в буфер. Число символов, помещаемых в буфер, задается вторым параметром функции getline(). При этом считывание происходит не более чем до первого встреченного символа-ограничителя «конец файловой строки», который представляется двумя символами '\r' и '\n'. Метод getiine()извлекает символ-ограничитель из потока, но не помещает его в буфер. Поэтому после каждого вывода содержимого буфера в поток foutвставляется и символ ограничитель. При использовании потока cinсимвол-ограничитель появляется в потоке при нажатии клавиши . cerr– не буферизированный поток для стандартного вывода сообщений об ошибках (по умолчанию – на монитор);
-
Копирование одного файла в другой
#include #include // exit() // вспомогательная функция void error (const char * message) { cerr
-
Использование числовых значений
#include #include // M_PI int main() { char rbuf[81]; double r,h; ifstream fin ("PARAM.DAT"); if (!fin.good()) {cerr > r; fin.getline(rbuf,sizeof(rbuf)); fin >> h; fin.getline(rbuf,sizeof(rbuf)); ofstreamfout("RESULT.DAT"); fout
-
Переназначение стандартных потоков.
#include # include ifstream fin; ofstreamfout; int main() { char buf[1]; fin.open("input.dat"); if(fin.good()) cin = fin; // переназначениеcin else {cerr
-
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.