Манипуляторы ввода-вывода

Void main ( )

{

double d = 1.321e9 ; int n = 1024 ;

// выводит значения

 

cout << "d = " << d << "\tn = " << n << ' \n ' ;

// изменяет флаги

cout.setf ( ios :: hex | ios :: uppercase ) ;

cout.setf ( ios :: showpos ) ;

// выводит значения снова

cout << "d = " << d << "\tn = " << n << ' \n ' ;

}

При выполнении программа выводит на экран:

d = 1.321е+09 n = 1024

d = +1.321Е+09 n = +1024

Система ввода-вывода C++ предусматривает еще один способ форматирования потока. Этот способ основан на использовании манипуляторов ввода-вывода. Манипуляторы ввода-вывода представляют собой просто вид функций-членов класса ios, которые, в отличие от обычных функций-членов, могут располагаться внутри инструкций ввода-вывода. В связи с этим ими пользоваться обычно удобнее. Манипуляторы вывода имеют следующее назначение:

endlвставляет символ конца строки и очищает буфер;

endsвставляет символ конца строки;

flushочищает буфер потока;

leftустанавливает флаг left;

rightустанавливает флаг right;

internalустанавливает флаг internal;

fixedустанавливает флаг fixed;

scientificустанавливает флаг scientific;

showbaseустанавливает флаг showbase;

noshowbaseсбрасывает флаг showbase;

showpointустанавливает флаг showpoint;

noshowpointсбрасывает флаг showpoint;

showposустанавливает флаг showpos;

noshowposсбрасывает флаг showpos;

unitbufустанавливает флаг unitbuf;

nounitbufсбрасывает флаг unitbuf;

uppercaseустанавливает флаг uppercase;

nouppercaseсбрасывает флаг uppercase.

Манипуляторы ввода-вывода имеют следующее назначение:

boolalphaустанавливает флаг boolalpha;

noboolalphaсбрасывает флаг boolalpha;

decустанавливает флаг dec;

hexустанавливает флаг hex;

octустанавливает флаг oct;

Setbase ( int base )задает основание системы счисления для целых;

Setfill ( charT c )устанавливает символ-заполнитель;

Setprecision ( int n )устанавливает точность чисел с плавающей точкой;

setw ( int n )устанавливает минимальную ширину поля;

Setiosflags ( ios_base :: fmtflags mask )Устанавливает ios-флаги, в соответствии с mask;

Resetiosflags ( ios_base :: fmtflags mask )Сбрасывает ios-флаги, в соответствии с mask.

Манипуляторы ввода имеют следующее назначение:

noskipwsсбрасывает флаг skipws;

skipwsустанавливает флаг skipws;

wsустанавливает пропуск символов-заполнителей.

За исключением setw ( ), все изменения в потоке, внесенные манипулятором, сохраняются до следующей установки.

При внимательном изучении таблицы можно заметить, что манипуляторы охватывают функциональные возможности, предоставляемые обычными функциями-членами и флагами форматирования. В частности, манипулятор setiosflags ( ) реализует те же функциональные возможности, что и функция-член setf ( ), а манипулятор resetiosflags ( ) – те же, что и функция-член unsetf ( ).

Для доступа к манипуляторам с параметрами необходимо включить в программу стандартный заголовочный файл <iomanip>. При использовании манипулятора без параметров скобки за ним не ставятся, так как на самом деле он представляет собой указатель на функцию-член, который передается перегруженному оператору <<.

Рассмотрим пример, демонстрирующий использование манипуляторов.

#include <iostream.h>

#include <iomanip.h>

#include <math.h>