![](/user_photo/2706_HbeT2.jpg)
Void unsetf ( fmtflags mask ) ;
Она сбрасывает флаги, заданные параметром mask. Следующий пример демонстрирует некоторые флаги:
#include <iostream>
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>