Void main ( )
{
double x ;
cout.precision ( 4 ) ;
cout.fill ( '0' ) ;
cout << "x\tsqrt(x)\tх^2\n" ;
for ( x = l.0 ; x<=6 . 0 ; x++ )
{
cout. width (4) ;
cout << x << ’\t’ ;
cout.width ( 6 ) ;
cout << sqrt ( x ) << ’\t’ ;
cout.width ( 3 ) ;
cout << x*x << ' \n ' ;
}
}
Эта программа выводит на экран небольшую таблицу значений переменной х, ее квадратного корня и квадрата:
X sqrt(x) x^2
0001 0000001 001
0002 001.414 004
0003 001.732 009
0004 002.000 016
0005 002.236 025
0006 002.449 036
Флаги форматирования
С каждым потоком связан набор флагов, которые управляют форматированием потока. Они представляют собой битовые маски, которые определены в классе ios как данные enum-типа fmt_flags. Сами флаги принадлежат типу fmtf lags, который определен следующим образом:
typedef int fmtflags ;
Флаги форматирования имеют следующее назначение:
boolalpha значения булевского типа вставляются и извлекаются в виде слов true и false
hex значения целого типа преобразуются к основанию 16 (как шестнадцатеричные)
dec значения целого типа преобразуются к основанию 10
oct значения целого типа преобразуются к основанию 8 (как восьмеричные)
basefield = dec | oct | hex флаги dec, oct и hex взаимно исключают друг друга
fixed числа с плавающей точкой выводятся в формате с фиксированной точкой
scientific числа с плавающей точкой выводятся в научной записи (т.е., +n.хххЕ+уу)
floatfield = scientific | fixed флаги scientific и fixed взаимно исключают друг друга
showbase выводится основание системы счисления в виде префикса к целому числовому значению (например, число 10FE выводится как Ох10FЕ)
showpoint при выводе значений с плавающей точкой выводится десятичная точка и последующие нули
showpos при выводе положительных числовых значений выводится знак плюс
uppercase заменяет определенные символы нижнего регистра на символы верхнего регистра (символ "е" при выводе чисел в научной нотации на "Е" и символ "х" при выводе 16ричных чисел на "X")
left данные при выводе выравниваются по левому краю поля
right данные при выводе выравниваются по правому краю поля
internal добавляются символы-заполнители между всеми цифрами и знаками числа для заполнения поля вывода
adjustfield = left | right | internal флаги left и right взаимно исключают друг друга
skipws ведущие символы-заполнители (знаки пробела, табуляции и перевода на новую строку) отбрасываются
unitbuf выходной буфер очищается после каждой операции вставки в поток
Прочесть текущие установки флагов позволяет функция-член flags ( ) класса ios. Для этого используется следующий прототип этой функции:
fmtflags flags ( ) const ;
Функция flags ( ) имеет и вторую форму, которая может использоваться для установки значений флагов. Для этого используется следующий прототип этой функции:
fmtflags flags ( fmtflags fmtfl ) ;
В этом случае битовый шаблон копируется fmtfl в переменную, предназначенную для хранения флагов форматирования. Функция возвращает предыдущие значения флагов. Поскольку эта форма функции меняет весь набор флагов, она применяется редко. Вместо нее используется функция-член setf ( ) класса ios, которая позволяет установить значение одного или нескольких флагов. Она имеет следующие прототипы:
fmtflags setf ( fmtflags mask ) ;
fmtflags setf ( fmtflags fmtfl , fmtflags mask ) ;
Первая функция-член неявно вызывает функцию flags ( mask | flags ( )) для установки битов, указанных параметром mask, и возвращает предыдущие значения флагов. Второй вариант функции присваивает битам, указанным параметром mask, значения битов параметра fmtfl, а затем возвращает предыдущие значения флагов. Например, следующий вызов функции setf ( ) устанавливает для потока cout флаги hex
и uppercase:
cout.setf ( ios :: hex | ios :: uppercase ) ;
Сбросить установленные флаги можно с помощью функции-члена unsetf ( ) класса ios, имеющей следующий прототип: