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

Лабораторная работа №10. Потоки ввода-вывода. Файловые операции

1 Цель и порядок работы

Цель работы – ознакомиться с возможностями ввода-вывода языка C++, освоить основные операции работы с файлами.

Порядок выполнения работы:

  • ознакомиться с описанием лабораторной работы;

  • получить задание у преподавателя, согласно своему варианту;

  • написать программу и отладить ее на ЭВМ;

2 Краткая теория

В библиотеке C++ имеется набор классов для управления вводом-выводом. В отличие от функций буферизованного ввода-вывода библиотек C (таких, как printf и scanf, не выполняющих никаких проверок на соответствие аргументов форматной строке) классы потоков C++ безопасны в отношении типа. Ввод-вывод использует механизм перегрузки операций, гарантирующий вызов нужной функции-операции для указанного типа данных. Это главное преимущество потоков языка C++.

2.1 Потоки ввода-вывода

В C++ существует несколько классов потоков:

  • Класс streambuf управляет буфером потока, обеспечивая базовые операции заполнения, опорожнения, сброса и прочих манипуляций с буфером.

  • Класс ios является базовым классом потоков ввода-вывода.

  • Классы istream и ostream – производные от ios и обеспечивают работу потоков соответственно ввода и вывода.

  • Класс iostream является производным от двух предыдущих и предусматривает функции, как для ввода, так и для вывода.

  • Классы ifstream, ofstream и fstream предназначены для управления файловым вводом-выводом.

  • Классы istrstream и ostrstream управляют резидентными потоками (форматированием строк в памяти).

Для работы с потоками необходимо подключить заголовочный файл <iostream>. Кроме того, может потребоваться подключить файлы <fstream> (файловый ввод-вывод), <iomanip> (параметризованные манипуляторы) и <strstream> (форматирование в памяти).

Библиотека ввода-вывода C++ предусматривает четыре предопределенных объекта-потока, связанных со стандартными входным и выходным устройствами.

Таблица 10.1 Предопределенные объекты-потоки C++

Имя

Класс

Описание

cin

istream

Ассоциируется со стандартным вводом (клавиатурой).

cout

ostream

Ассоциируется со стандартным выводом (экраном).

cerr

ostream

Ассоциируется со стандартным устройством ошибок (экраном) без буферизации.

clog

ostream

Ассоциируется со стандартным устройством ошибок (экраном)с буферизацией.

Основными классами ввода-вывода C++ являются istream и ostream. Первый из них перегружает операцию правого сдвига (>>), которая служит в нем для ввода данных и называется операцией извлечения из потока. Класс ostream перегружает соответственно операцию левого сдвига (<<); она применяется для вывода и называется операцией передачи в поток.

Библиотека ввода-вывода предусматривает три способа форматирования: посредством вызова форматирующих функций-элементов, с помощью манипуляторов или путем установки или сброса флагов потока.

Подробней форматирование ввода-вывода рассмотрено в лабораторной работе №2.

Состояние объекта класса ios (и производных от него) содержится в его закрытом элементе _state в виде набора битов (Таблица 11.2).

Таблица 10.2 биты состояния потока

Бит

Описание

goodbit

С потоком все в порядке (на самом деле это не какой-то бит, а 0 — отсутствие битов ошибки).

eofbit

Показывает, что достигнут конец файла.

failbit

Индицирует ошибку формата или преобразования. После очистки данного бита работа с потоком может быть продолжена.

badbit

Индицирует серьезную ошибку потока, связанную обычно с буферными операциями или аппаратурой. Скорее всего, поток далее использовать невозможно.

Для опроса или изменения состояния потока в классе ios имеется ряд функций и операций.

  • int rdstate(); Возвращает текущее состояние.

  • bool eof(); Возвращает true, если установлен eofbit.

  • bool good(); Возвращает true, если не установлен ни один из битов ошибки.

  • bool fail(); Возвращает true, если установлен failbit или badbit.

  • bool bad(); Возвращает true, если установлен badbit.

  • void clear(int = 0); Сбрасывает биты ошибки (по умолчанию) или устанавливает состояние потока в соответствии с аргументом.

  • void setstate(int); Устанавливает состояние битов ошибки с соответствии с аргументом.

  • operator void *(); Возвращает нулевой указатель, если установлен какой-либо из битов ошибки.

  • bool operator !(); Возвращает true, если установлен какой-либо из битов ошибки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]