Выбрать главу

При установленном флаге unitbuf содержимое буфера сбрасывается на диск после каждой операции вывода данных.

Если установлен флаг boolalpha, значения булева типа можно вводить или выводить, используя ключевые слова true и false.

Поскольку часто приходится обращаться к полям oct, dec и hex, на них допускается коллективная ссылка ios::basefield. Аналогично поля left, right и internal можно собирательно назвать ios::adjustfield. Наконец, поля scientific и fixed можно назвать ios::floatfield.

Чтобы установить флаги форматирования, обратитесь к функции setf().

Для установки любого флага используется функция setf(), которая является членом класса ios. Вот как выглядит ее формат.

fmtflags setf(fmtflags flags);

Эта функция возвращает значение предыдущих установок флагов форматирования и устанавливает их в соответствии со значением, заданным параметром flags. Например, чтобы установить флаг showbase, можно использовать эту инструкцию.

stream.setf(ios::showbase);

Здесь элемент stream означает поток, параметры форматирования которого вы хотите изменить. Обратите внимание на использование префикса ios:: для уточнения принадлежности параметра showbase. Поскольку параметр showbase представляет собой перечислимую константу, определенную в классе ios, то при обращении к ней необходимо указывать имя класса ios. Этот принцип относится ко всем флагам форматирования. В следующей программе функция setf() используется для установки флагов showpos и scientific.

#include <iostream>

using namespace std;

int main()

{

 cout.setf(ios::showpos);

 cout.setf(ios::scientific);

 cout << 123 << " " << 123.23 << " ";

 return 0;

}

Вот как выглядят результаты выполнения этой программы.

+123 +1.232300е+002

С помощью операции ИЛИ можно установить сразу несколько нужных флагов форматирования в одном вызове функции setf(). Например, предыдущую программу можно сократить, объединив по ИЛИ флаги scientific и showpos, поскольку в этом случае выполняется только одно обращение к функции setf().

cout.setf(ios::scientific | ios::showpos);

Чтобы сбросить флаг, используйте функцию unsetf(), прототип которой выглядит так.

void unsetf(fmtflags flags);

Для очистки флагов форматирования используется функция unsetf().

В этом случае будут обнулены флаги, заданные параметром flags. (При этом все другие флаги остаются в прежнем состоянии.)

Чтобы получить текущие установки флагов форматирования, используйте функцию flags().

Для того чтобы узнать текущие установки флагов форматирования, воспользуйтесь функцией flags(), прототип которой имеет следующий вид.

fmtflags flags();

Эта функция возвращает текущее значение флагов форматирования для вызывающего потока.

При использовании следующего формата вызова функции flags() устанавливаются значения флагов форматирования в соответствии с содержимым параметра flags и возвращаются их предыдущие значения.

fmtflags flags(fmtflags flags);

Чтобы понять, как работают функции flags() и unsetf(), рассмотрим следующую программу. Она включает функцию showflags(), которая отображает состояние флагов форматирования.

#include <iostream>

using namespace std;

void showflags(ios::fmtflags f);

int main()

{

 ios::fmtflags f;

 f = cout.flags();

 showflags(f);

 cout.setf(ios::showpos);

 cout.setf(ios::scientific);

 f = cout.flags();

 showflags(f);

 cout.unsetf(ios:scientific);

 f = cout.flags();