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

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


Глава 9. Дополнительные жности ввода/вывода в С++

297

els (i S ios: :badbit)

cout Фатальная ошибка ввода/вывода\n ;

Эта программа всегда будет выводить сообщение по крайней мере об одной ошибке. После окончания цикла while последний вызов функции checkstatusO, как и ожидается, выдаст сообщение о достижении конца файла (символа EOF).

2. В следующей программе с помощью функции good() файл проверяется на наличие ошибки:

♦include <iostream>

finclude <fstream> *

using namespace std;

int maindnc argc, char *argv[]) {

char ch; .... :. -.,

if(argc!=2) {

cout < Содер;кимое: <И1ЛЯ файла>\п ;

return

1 Г. . .

if ~ i

ifstream in(argvll]);

iin) {

cou << Файл открыть невоэможноХп ;

return 1; . . . .:

) .

while(!in.eof{)) { in.get(ch);

контроль ошибки

if ( !in.goouu !in.eof()) {

cou << Обка ввода/вывода , . , прерывание работы\п ; return 1;

cou << ch;

in.close С return 0;


1. Добавьте контроль ошибок в ваши ответы на вопросы предыдущего раздела.



Примеры!

В следующей программе относительно класса coord перегружаются операторы << и >> Обратите внимание, что одни и те же оператор-фуньщии можно использовать для вывода как на экран, так и в файл.

tinclude <iostreain> ttinclude <fstream> using namespace std;

class coord i

int X, y; \

public:

coorddnt i, int j) { x -- i; у = j; }

friend ostream Stream stream, coord ob) ; friend istream Stream Sstrearo, coord bob);

ostream ator (ostream eam, coord ob)

stream ob. ob.y \n; return stream;

! , - -

istream ator (istream eam, coord Sob)

{ \- -

stream ob. ob.y;

return stream; . .

9.7. Пользовательский ввод/вывод и файлы

В предыдущей главе вы изучили перегрузку операторов ввода и вывода для создаваемых вами классов. При этом рассматривался только консольный ввод/вывод. Однако поскольку все потоки C++ одинаковы, то одинаково перегруженная, например, функция вывода, может использоваться без каких-либо изменений для вывода как на экран, так и в файл. Это одна из

наиболее важных и полезных возможностей ввода/вывода в C++.

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



out ol o2; out.closeO ; ifstream in ( test );

if(!in) {

cou-: Фа открыть невозможно Xn ;

return 1;

coor ) , o4 [0, 0) ;

cout o3 in.closeO ;

return 0;

2. Bee манипуляторы ввода/вывода подходят и для файлового ввода/вывода. Например, в представленной ниже переработанной версии одной из программ этой главы, тот манипулятор, который выводит информацию на экран, используется и для ее записи в файл.

#include <iostream> ttinclude <fstream>

ttinclude <iomanip> -<

using namespace std;

Внимание; . i. i .

ostreani &atn(ostream istream)

{

stream -:< Внание: ;

return stream;

Пожалуйста, не забудьте: ostream ote (ostream Sstream) (

stream << Пожайста, не забудьте:

int ma in () t

coord ol(l, 2) , o2 (3, A); ofstream out ( test );

if (lout) { . . -

cout Файл открыть невоэможноХп ;

return 1;



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

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