Программирование >>  Расширенная версия языка c++ 

1 ... 93 94 95 [ 96 ] 97 98 99 ... 227


294 Самоучитель С++

1, В следующей программе функции kg() используется для установки указателя считывания в заданную позицию внутри файла и для вывода содержимого файла, начиная с этой позиции. Имя файла и позиция начала считывания задаются в командной строке.

Демонстрация работе! функции seekg() - -

tinclude <i03tream> .- . :

#include <fstreaiTi>

ttinclude <cstdlib> , -. V

using namespace std; -V

in (int argc, char *argv[])

char ch;

if (argc!-3) { iJ

cout Поиск: <файл> <позиция>\п ;

return 1;

J -1,:. г r

ifstream in (argv [1] : :inI ios: : binary) ; .

if(!in) {

ccou Файл открыть невозможно \n ;

return

in.seekg (atoi(argv[2]), ios::beg);

whil eof 0) {

in.get(ch); . ,

cout ch;

in.closeO;

return 0;

Упразкиения

1. Напишите программу для вывода на экран содержимого текстового файла в обратном порядке. (Подсказка: Обдумайте задание перед началом программирования. Решение проще, чем может показаться на первый взгляд.)

2. Напишите программу, которая попарно меняет местами символы в текстовом файле. Например, если в файле содержится 1234 , то после выполнения программы там должно содержаться 2143 . (Для простоты считайте, что в файле содержится четное число символов.)



9.6. Контроль состояния ввода/вывода

В системе ввода/вывода ивается информация о состоянии после каждой операции ввода/вывода. Текущее состояние потока ввода/вывода, которое хранится в объекте типа iostate, является перечислением, определенным в классе ios и содержащим следующие члены:

Название Значение

goodbit Ошибок нет

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

failbit Имеет место нефатальная ошибка

badbit Имеет место фатальная ошибка

В устаревших компиляторах флаги состояния ввода/вывода хранятся как целые, а не как объекты типа iostate.

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

iostate rdstate();

Функция возвращает текущее состояние флагов ошибки. Как вы, вероятно, догадываетесь, глядя на приведенный выше список флагов, функция rdstateO возвращает флаг goodbit при отсутствии какой бы то ни было

ошибки. В противном случае она возвращает флаг ошибки.

Другим способом определение того, имела ли место ошибка, является использование одной или нескольких следующих функций - членов класса ios:

bool bad () ; bool eof () ; boo il () ; bool goodO ;

Функция eof() уже обсуждалась. Функция bad() возвращает истину, если установлен флаг badbit. Функция fail() возвращает истину, если установлен флаг failbit. Функция good() возвращает истину при отсутствии ошибок. В противном случае функции возвращают ложь.

После появления ошибки может возникнуть необходимость сбросить это состояние перед тем, как продолжить выполнение программы. Для этого используется функция с1еаг(), являющаяся членом класса ios. Ниже приведен прототип этой функции:

voi iostate фляга = ioe: : goodbit) ;



-.1;

Примеры!

1. В следующей программе иллюстрируется выполнение функции rdstate(). Программа выводит на экран содержимое текстового файла. При наличии ошибки функция сообщает об этом с помощью функции checkstatus().

♦ include <iostreain>

#include <fstream>

using namespace std; -., . чп-

void checkstatus(ifstream Sin); in m{int argc, char *argv[])

if (argc!=2) { . i i-

cout Содержимое: <имя файла>\п ; ..-Л

return 1; !

ifstream in(argv[l]);

if (t in) H ... , I

I cou Файл открыть невОЭМОХНО\п ;

return 1;

chare; г С т-*; .. ->ГН-( . . . .

While (in.get (с)) { : >::- i \ Л ->- -

cout

checkstatus(in) ;

checkstatus dn) ; контроль финального состояния ] . in.closeO ;

return 0; , . - ,

voi tas (ifstream sin) л .4

ios::iostate i; , ,. : ,

: - 4.

if(i & ios: :Gofbit) v -. . / ,;

cou Достигнут EOF\n ;

else if(i & ios::failbit)

cout Нефатальная ошибка ввода/вывода\п ;

Если параметр флаги равен goodbit (значение по умолчанию), то сбрасываются флаги всех ошибок. В противном случае переменной флаги присваиваются значения тех флагов, которые вы хотите сбросить.



1 ... 93 94 95 [ 96 ] 97 98 99 ... 227

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