![]() |
|
Программирование >> Расширенная версия языка c++
Глава 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;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |