Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

10.4.2.1 Стандартные манипуляторы ввода-вывода

Это следующие манипуляторы:       // Simple manipulators:       ios& oct(ios&); // в восьмеричной записи       ios& dec(ios&); // в десятичной записи       ios& hex(ios&); // в шестнадцатеричной записи       ostream& endl(ostream&); // добавить '\n' и вывести       ostream& ends(ostream&); // добавить '\0' и вывести       ostream& flush(ostream&); // выдать поток       istream& ws(istream&); // удалить обобщенные пробелы       // Манипуляторы имеют параметры:       SMANIP<int> setbase(int b);       SMANIP<int> setfill(int f);       SMANIP<int> setprecision(int p);       SMANIP<int> setw(int w);       SMANIP<long> resetiosflags(long b);       SMANIP<long> setiosflags(long b); Например,       cout << 1234 << ' '       << hex << 1234 << ' '       << oct << 1234 << endl; напечатает       1234 4d2 2322 и       cout << setw(4) << setfill('#') << '(' << 12 << ")\n";       cout << '(' << 12 << ")\n"; напечатает       (##12)       (12) Не забудьте включить файл <iomanip.h>, если используете манипуляторы с параметрами.

10.4.3 Члены ostream

В классе ostream есть лишь несколько функций для управления выводом, большая часть таких функций находится в классе ios.       class ostream : public virtual ios {       //...       public:       ostream& flush();       ostream& seekp(streampos);       ostream& seekp(streamoff, seek_dir);       streampos tellp();       //...       }; Как мы уже говорили, функция flush() опустошает буфер в выходной поток. Остальные функции используются для позиционирования в ostream при записи. Окончание на букву p указывает, что именно позиция используется при выдаче символов в заданный поток. Конечно эти функции имеют смысл, только если поток присоединен к чему-либо, что допускает позиционирование, например файл. Тип streampos представляет позицию символа в файле, а тип streamoff представляет смещение относительно позиции, заданной seek_dir. Все они определены в классе ios:       class ios {       //...       enum seek_dir {       beg=0, // от начала файла       cur=1, // от текущей позиции в файле       end=2 // от конца файла       };       //...       }; Позиции в потоке отсчитываются от 0, как если бы файл был массивом из n символов:       char file[n-1]; и если fout присоединено к file, то       fout.seek(10);       fout<<'#'; поместит # в file[10].

10.4.4 Члены istream

Как и для ostream, большинство функций форматирования и управления вводом находится не в классе iostream, а в базовом классе ios.       class istream : public virtual ios {       //...       public:       int peek()       istream& putback(char c);       istream& seekg(streampos);       istream& seekg(streamoff, seek_dir);       streampos tellg();       //...       }; Функции позиционирования работают как и их двойники из ostream. Окончание на букву g показывает, что именно позиция используется при вводе символов из заданного потока. Буквы p и g нужны, поскольку мы можем создать производный класс iostreams из классов ostream и istream, и в нем необходимо следить за позициями ввода и вывода.       С помощью функции peek() программа может узнать следующий символ, подлежащий вводу, не затрагивая результата последующего чтения. С помощью функции putback(), как показано в $$10.3.3, можно вернуть ненужный символ назад в поток, чтобы он был прочитан в другое время.