Манипуляторы ввода-вывода
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>