Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №9 Потоковий ввід-вивід.doc
Скачиваний:
2
Добавлен:
24.11.2019
Размер:
196.61 Кб
Скачать

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, имеющей следующий прототип: