При установленном флаге 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();