Форматом ввода-вывода можно управлять с помощью флагов форматирования потока, объявленных в классе ios. Их описание приведено в таблице 3.
Таблица 3 – Флаги форматирования
Флаг
Описание
booalpha
Выводить данные типа bool в символьном виде, т.е. 0 – false, !0 – true
dec
Использовать десятичное представление
fixed
Представление вещественных чисел в формате с фиксированной точкой
hex
Использовать шестнадцатеричное представление
internal
Помещать символ-заполнитель (пробел) после знака числа или символа-признака основания системы счисления
left
Выравнивание по левому краю поля
oct
Использовать восьмеричное представление
right
Выравнивание по правому краю поля
scientific
Представление вещественных чисел в научном формате (мантисса и порядок, разделённые символом 'e' или 'E')
showbase
Выводить признак системы счисления
showpoint
В вещественных числах выводить точку даже для нулевой дробной части
showpos
При выводе положительных чисел выводить знак «+»
skipws
Пропускать пробельные символы при вводе
stdio
Освобождать стандартные потоки stdout, stderr языка C после каждого вывода в поток
unitbuf
Освобождать буферы (выводить содержимое) всех потоков после каждого включения (вывода) в поток
uppercase
При выводе чисел использовать буквы верхнего регистра ('E' вместо 'e', 'X' вместо 'x')
Флаги форматирования объявлены в классе ios в виде констант, описанных в таблице 3.
Чтобы использовать форматирование при выводе необходимо указать соответствующие флаги с использованием метода flags класса cout. Понятия класса и метода относятся к объектно-ориентированному программированию и будут рассмотрены позже. В приведённом ниже примере устанавливается вывод знаков '+', строковое представление логических значений и вывод вещественных чисел в фиксированном формате.
Результатом выполнения этой программы будет следующий вывод:
20 100000 0
+20 +100000.123457 false
Обратите внимание, каким образом задаются флаги форматирования. Для указания нескольких флагов используется операция побитового сложения '|', которая описана в пункте 4.7.6. Там же описан принцип работы с битовыми масками и флагами, с помощью которого реализованы флаги форматирования.
Так как флаги являются константами, объявленными в классе ios, то для их использования необходимо явное указание этого класса (ios::).
Также можно устанавливать отдельные флаги форматирования с помощью метода setf. Например,
cout.setf(ios::boolalpha);
cout.setf(ios::showpos | ios::fixed);
При использовании setf значения старых флагов не теряются.
Для сброса флага используется метод unsetf. Например, сброс флагов hex и boolalpha: