702_____________________________________________Глава 12

12.9.3.2 Манипуляторы потоков

В разделе 12.9.3.1 и в главе 11 в разделе 11.7.14 рассматривался один из мани-
пуляторав потоков — манипулятор endl, переводящий поток на новую строку.
Имеется еще много манипуляторов потока, позволяющих форматировать вывод в
файл операцией вывода в поток «.

Чтобы посмотреть возможности манипулятора, вы можете построить прило-'
жение, аналогичное рассмотренным в предыдущих разделах и содержащее окно
Memol и кнопку, обработчик события OnClick которой имеет следующий вид:

ftinclude <fstream.h>
#include <iomanip.h>

char s [40] ;

// создание файла как выходного потока
ofstream outfile("Test.dat");

if(!outfile)
{

ShowMessage("Файл не удается создать");

return;

t
// операторы, использующие операция вывести в поток                   '

// закрытие файла
outfile.close (); ,

if stream infile("Test.dat");

iff!infile)
(

ShowMessage("Файл не удается открыть");

return;

}

Memol->Clear() ;

while(!infile.eof())
{

infile.getline(s,80) ;

Memol->Lines->Add(s) ;

}

// закрытие файла

infile.close();

Манипуляторы dec, oct, hex и setbase определяют систему счисления, в кото-
рой выводятся целые числа — соответственно десятичную, восьмеричную, шест-
надцатеричную и с заданным основанием. По умолчанию целые числа выводятся
как десятичные. Послав в поток один из перечисленных модификаторов вы може-
те перейти к другой системе счисления и она будет действовать до тех пор, пока вы
не примените новый модификатор. Модификатор setbase относится к параметри-
зированным модификаторам потоков. В качестве параметра в него передается
основание системы счисления. Для применения этого и других параметризован-
ных модификаторов надо включить в проект заголовочный файл <iomanip.h>.
Приведем пример использования рассмотренных модификаторов. Операторы

int i = 31;

outfile « i « ' ' « hex « i « ' ' « oct « i « ' ' «

setbase (10) « i « endl;

приведут к записи текста «31 If 37 31». Сначала число 31 отображается в десяти-
чном виде, потом в восьмеричном, затем в шестнадцатеричная и в заключение
опять в десятичном.

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