Флаги форматирования
В системе ввода-вывода C++ каждый поток связан с набором флагов форматирования, которые управляют процессом форматирования информации. В классе ios_base объявляется перечисление fmtflags, в котором определены следующие значения.
adjustfield basefield boolalpha dec fixed |
floatfield hex internal left oct |
right scientific showbase showpoint showpos |
skipws unitbuf uppercase |
Эти значения используются для установки или очистки флагов форматирования с помощью таких функций, как setf() и unsetf().
Флаги |
Назначение |
Пробельных символов |
Когда установлен флаг skipws, ведущие пробельные символы, или символы пропуска(пробелы, символы табуляции и новой строки), отбрасываются при выполнении ввода в поток. Когда флаг skipws сброшен, пробельные символы не отбрасываются. |
Выравнивание |
Когда установлен флаг left, результат выравнивается по левому краю. А когда установлен флаг right, результат выравнивается по правому краю. Когда установлен флаг internal, числовое значение дополняется пробелами, чтобы заполнить поле между каким-либо знаком или основным символом. Если ни один из этих флагов не установлен, результат выравнивается по правому краю по умолчанию. |
Системы счисления |
По умолчанию числовые значения выводятся в десятичной системе счисления. Однако основание системы счисления можно изменить. Установка флага oct приведет к выводу результата в восьмеричном представлении, а установка флага hex — в шестнадцатеричном. Чтобы при отображении результата вернуться к десятичной системе счисления, достаточно установить флаг dec. |
Основание системы счисления |
Установка флага showbase приводит к отображению обозначения основания системы счисления, служащего для представления числовых значений. Например, если используется шестнадцатеричное представление, то значение IF будет отображено как Ox1F. |
Отображение чисел |
По умолчанию при использовании экспоненциального представления чисел отображается строчной вариант буквы "е". Кроме того, при отображении шестнадцатеричного значения используется также строчная буква "х". После установки флага uppercase отображается прописной вариант этих символов.
Установка флага showpos вызывает отображение ведущего знака "плюс" перед положительными значениями.
Установка флага showpoint приводит к отображению десятичной точки и хвостовых нулей для всех чисел с плавающей точкой — нужны они или нет.
После установки флага scientific числовые значения с плавающей точкой отображаются в экспоненциальном представлении. Когда установлен флаг fixed, вещественные значения отображаются в обычном представлении. Если не установлен ни один флаг, компилятор сам выбирает соответствующий метод представления. |
Разное |
При установленном флаге unitbuf буфер сбрасывается после каждой операции вставки.
Если установлен флаг stdi(), потоки stdout и stderr сбрасываются после каждой операции вывода.
Установка флага boolalpha позволяет вводить и выводить булевы значения с помощью ключевых слов true и false. |
Поскольку часто приходится обращаться к полям oct, dec и hex, на них допускается коллективная ссылка ios::basefied. Аналогично поля left, right и internal можно собирательно назвать ios::adjustfield. Наконец, поля scientific и fixed можно назвать ios::floatfield.
|