Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Опрос и установка состояния потока

Читайте также:
  1. ADOR (опросник для подростков)
  2. CMS Joomla. Установка шаблона. Создание и настройка модулей.
  3. I. К истории вопроса
  4. I. Примерный перечень вопросов рубежного контроля.
  5. I. Разбор основных вопросов темы.
  6. II. Примерный перечень вопросов к зачету (экзамену) по всему курсу.
  7. IV. СОБРАНИЯ ГРАЖДАН ПО ВОПРОСАМ ТОС

Класс ios поддерживает информацию о состоянии потока после каждой операции ввода-вывода. Те­кущее состояние потока хранится в объекте типа iostate, который объявлен следующим образом: typedef int iostate;

Объектно-ориентированное программирование


Лекция 10 Потоковый ввод-вывод 14

Состояния потока являются элементами перечислимого типа io_state, который может иметь следую­щие значения:

goodbit ошибок нет;

eofbit достигнут конец файла;

failbit имеет место ошибка форматирования или преобразования;

badbit имеет место серьезная ошибка.

Для опроса и установки состояния потока можно использовать функции-члены класса ios. Имеется два способа получения информации о состоянии операции ввода-вывода. Во-первых, можно вызвать функцию rdstate (), имеющую следующий прототип: iostate rdstate () const;

Функция возвращает состояние операции ввода-вывода. Во-вторых, можно воспользоваться одной из следующих функций-членов:

bool good () const; bool eof () const; bool fail () const; bool bad () const; Каждая из этих функций возвращает true, если установлен соответствующий бит состояния. Если прочитано состояние, которое сигнализирует об ошибке, то его можно сбросить с помощью функции clear ():

void clear (iostate state = ios:: goodbit); Установить нужное состояние можно с помощью функции setstate ():

void setstate (iostate state); Кроме перечисленных функций, класс ios содержит функцию приведения типа operator void*() const; (она возвращает NULL, если установлен бит badbit) и перегруженный оператор логического отрицания

bool operator! () const; (он возвращает true, если установлен бит badbit). Это позволяет сравнивать выражения, в которые вхо­дит поток или его отрицание с нулем, то есть писать выражения вида:

while (! strmOb.eof ()) { • • • }

Следующий пример иллюстрирует получение информации о состоянии ввода-вывода.

#include <iostream.h>

#include <fstream.h>

int main (int argc, char* argv [ ])

{

Char c;

if (argc > 1)

{

ifstream ifs (argv [ l ]);

if (! ifs)

{

cout << "File not open\n"; return 1; }

while (! ifs.eof ()) {

Ifs.get (c);

if (ifs.fail ()) // контролирует состояния потока

{

cout << "Mistake!"; break; }

cout << c; }

ifs.close (); }

return 0; }

Объектно-ориентированное программирование


Лекция 10 Потоковый ввод-вывод 15

В этом примере осуществляется ввод символов из файла, заданного в командной строке при запуске программы. Если при извлечении символов встречается ошибка, чтение прекращается и выводится сооб­щение об этом.


Дата добавления: 2015-07-11; просмотров: 163 | Нарушение авторских прав


Читайте в этой же книге: ПРЕДОПРЕДЕЛЕННЫЕ ПОТОКИ | Basicliostream iostream basiclstreambuf streambuf | Форматирующие функции-члены | Флаги форматирования | Манипуляторы ввода-вывода | Правові та організаційні основи охорони праці | Нормативно-правова база охорони праці | Тема 2. Державне управління охороною праці. Державний нагляд і громадський контроль за охороною праці |
<== предыдущая страница | следующая страница ==>
Explicit ifstream ( ) ; explicit ofstream ( ) ; explicit fstream ( ) ;| ЛЕКЦІЯ 1

mybiblioteka.su - 2015-2024 год. (0.006 сек.)