Что такое boolalpha в c
Что такое boolalpha в c
Параметры форматирования любого потока можно изменить не только посредством прямой установки или очистки флагов форматирования, но и с помощью специальных функций, называемых манипуляторами, которые можно включить в выражение ввода-вывода. Стандартные манипуляторы описаны в следующей таблице.
Манипулятор | Назначение | Функция |
---|---|---|
boolalpha | Устанавливает флаг boolalpha | Ввод-вывод |
dec | Устанавливает флаг dec | Ввод-вывод |
endl | Выводит символ новой строки и сбрасывает поток | Вывод |
ends | Вставляет в поток нулевой символ (‘\0’) | Вывод |
flush | Сбрасывает поток | Вывод |
hex | Устанавливает флаг hex | Ввод-вывод |
internal | Устанавливает флаг internal | Вывод |
left | Устанавливает флаг lеft | Вывод |
noboolalpha | Сбрасывает флаг boolalpha | Ввод-вывод |
noshowbase | Сбрасывает флаг showbase | Вывод |
noshowpoint | Сбрасывает флаг showpoint | Вывод |
noshowpos | Сбрасывает флаг showpos | Вывод |
noskipws | Сбрасывает флаг skipws | Ввод |
nounitbuf | Сбрасывает флаг unitbuf | Вывод |
nouppercase | Сбрасывает флаг uppercase | Вывод |
oct | Устанавливает флаг oct | Ввод-вывод |
resetiosflags (fmtflags f) | Очищает флаги, заданные в переменной f | Ввод-вывод |
right | Устанавливает флаг right | Вывод |
scientific | Устанавливает флаг scientific | Вывод |
setbase (int base) | Устанавливает основание системы счисления равной значению base | Вывод |
setfill (int ch) | Устанавливает символ-заполнитель равным значению переменной ch | Вывод |
setiosflags (fmtflags f) | Устанавливает флаги, заданные в переменной f | Ввод-вывод |
setprecision (int p) | Устанавливает количество цифр точности(после десятичной точки) | Вывод |
setw(int w) | Устанавливает ширину поля равной значению переменной w | Вывод |
showbase | Устанавливает флаг showbase | Вывод |
showpoint | Устанавливает флаг showpoint | Вывод |
showpos | Устанавливает флаг showpos | Вывод |
skipws | Устанавливает флаг skipws | Ввод |
unitbuf | Устанавливает флаг unitbuf | Вывод |
uppercase | Устанавливает флаг uppercase | Вывод |
ws | Пропускает ведущие пробельные символы | Ввод |
Совет программисту
Одним из самых интересных флагов форматирования, добавленных в новую библиотеку iostream, является флаг boolalpha. Его можно установить либо напрямую, либо путем использования манипуляторов boolalpha() и noboolalpha(). Дело в том, что установка флага boolalpha позволяет вводить и выводить булевы значения с помощью ключевых слов true и false. Обычно нужно было вводить число 1 для значения истины и число 0 для значения лжи. Рассмотрим, например, следующую программу.
Вот пример работы этой программы.
Очевидно, что после установки флага boolalpha логические(булевы) значения вводятся и выводятся с помощью слов true и false. Как видно из текста этой программы, флаг boolalpha необходимо установить для потоков cin и cout отдельно, Как и установка всех флагов форматирования, установка флага boolalpha для одного потока не означает, что он установлен и для другого.
Урок №209. Функционал классов ostream и ios. Форматирование вывода
Обновл. 15 Сен 2021 |
На этом уроке мы рассмотрим функционал классов ostream и ios в языке С++.
Форматирование вывода
Есть два способа управления параметрами форматирования вывода:
флаги — это логические переменные, которые можно включить/выключить;
манипуляторы — это объекты, которые помещаются в поток и влияют на способ ввода/вывода данных.
Для включения флага используйте функцию setf() с соответствующим флагом в качестве параметра. Например, по умолчанию C++ не выводит знак + перед положительными числами. Однако, используя флаг std::showpos, мы можем это изменить:
Также можно включить сразу несколько флагов, используя побитовый оператор ИЛИ ( | ):
Чтобы отключить флаг, используйте функцию unsetf():
Многие флаги принадлежат к определенным группам форматирования. Группа форматирования — это группа флагов, которые задают аналогичные (иногда взаимоисключающие) параметры форматирования вывода. Например, есть группа форматирования basefield.
Флаги группы форматирования basefield:
oct (от англ. «octal» = «восьмеричный») — восьмеричная система счисления;
dec (от англ. «decimal» = «десятичный») — десятичная система счисления;
hex (от англ. «hexadecimal» = «шестнадцатеричный») — шестнадцатеричная система счисления.
Эти флаги управляют выводом целочисленных значений. По умолчанию установлен флаг std::dec, т.е. значения выводятся в десятичной системе счисления. Попробуем сделать следующее:
Ничего не работает! Почему? Дело в том, что setf() только включает флаги, он не настолько умен, чтобы одновременно отключать другие (взаимоисключающие) флаги. Следовательно, когда мы включаем std::hex, std::dec также включен и у него приоритет выше. Есть два способа решения данной проблемы.
Во-первых, мы можем отключить std::dec, а затем включить std::hex:
Теперь уже результат тот, что нужно:
Второй способ — использовать вариацию функции setf(), которая принимает два параметра:
первый параметр — это флаг, который нужно включить/выключить;
второй параметр — группа форматирования, к которой принадлежит флаг.
При использовании этой вариации функции setf() все флаги, принадлежащие группе форматирования, отключаются, а включается только передаваемый флаг. Например:
Язык C++ также предоставляет еще один способ изменения параметров форматирования: манипуляторы. Фишка манипуляторов в том, что они достаточно умны, чтобы одновременно включать и выключать соответствующие флаги. Например:
В общем, использовать манипуляторы гораздо проще, нежели включать/выключать флаги. Многие параметры форматирования можно изменять как через флаги, так и через манипуляторы, но есть и такие параметры форматирования, которые изменить можно либо только через флаги, либо только через манипуляторы.
Полезные флаги, манипуляторы и методы
Флаг:
Манипуляторы:
1 0
true false
1 0
true false
Флаг:
Манипуляторы:
Флаг:
uppercase — если включен, то используются заглавные буквы.
Манипуляторы:
uppercase — используются заглавные буквы.
nouppercase — используются строчные буквы.
1.23457e+007
1.23457E+007
1.23457e+007
1.23457E+007
Флаги группы форматирования basefield:
dec — значения выводятся в десятичной системе счисления;
hex — значения выводятся в шестнадцатеричной системе счисления;
oct — значения выводятся в восьмеричной системе счисления.
Манипуляторы:
dec — значения выводятся в десятичной системе счисления;
hex — значения выводятся в шестнадцатеричной системе счисления;
oct — значения выводятся в восьмеричной системе счисления.
Теперь вы уже должны понимать связь между флагами и манипуляторами.
Точность, запись чисел и десятичная точка
Используя манипуляторы (или флаги), можно изменить точность и формат вывода значений типа с плавающей точкой.
Флаги группы форматирования floatfield:
fixed — используется десятичная запись чисел типа с плавающей точкой;
scientific — используется экспоненциальная запись чисел типа с плавающей точкой;
showpoint — всегда отображается десятичная точка и конечные нули для чисел типа с плавающей точкой.
Манипуляторы:
fixed — используется десятичная запись значений;
scientific — используется экспоненциальная запись значений;
showpoint — отображается десятичная точка и конечные нули чисел типа с плавающей точкой;
noshowpoint — не отображаются десятичная точка и конечные нули чисел типа с плавающей точкой;
setprecision(int) — задаем точность для чисел типа с плавающей точкой.
Методы:
precision() — возвращаем текущую точность для чисел типа с плавающей точкой;
precision(int) — задаем точность для чисел типа с плавающей точкой.
Если используется десятичная или экспоненциальная запись чисел, то точность определяет количество цифр после запятой/точки. Обратите внимание, если точность меньше количества значащих цифр, то число будет округлено. Например:
Форматированный ввод-вывод в C++
В этом уроке мы вернемся к используемым ранее операторам cin и cout для рассмотрения их в организации форматированного ввода-вывода. Для управления вводом-выводом в C++
используются :
Флаги позволяют установить параметры ввода-вывода, которые будут действовать во всех последующих операторах ввода-вывода до тех пор, пока не будут отменены. Манипуляторы вставляются в операторы cin(cout) и устанавливают параметры текущего оператора ввода-вывода.
Использование флагов
Флаги позволяют включить или выключить один из параметров вывода на экран. Для установки флага вывода используется следующая конструкция языка C++:
cout.setf(ios::flag)
Для снятия флага конструкция:
cout.unsetf(ios::flag)
Здесь flag — имя конкретного флага.
Если при выводе необходимо установить несколько флагов, то можно воспользоваться арифметической операцией «или» (|). В этом случае конструкция языка C++ будет такой:
cout.setf(ios::flag1 | ios::flag2 | ios::flag3)
В данном случае flag1, flag2, flag3 — имена устанавливаемых флагов вывода. В таблице ниже приведены некоторые флаги форматного вывода с примерами их использования.
Флаг | Описание | Пример использования | Результат | ||||||||||||||||||||||
right | Выравнивание по правой границе | 1 true | |||||||||||||||||||||||
dec | Вывод величин в десятичной системе счисления (по умолчанию) | r=-25 | |||||||||||||||||||||||
oct | Вывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) | p=27 | |||||||||||||||||||||||
hex | Вывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) | p=0x17 | |||||||||||||||||||||||
uppercase | Использовать прописные буквы в шестнадцатеричных цифрах | p=1.466730e+002 | |||||||||||||||||||||||
fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |
Манипулятор | Описание | Пример использования | Результат |
setw(n) | Определяет ширину поля вывода в n символов | r=253 | |
setprecision(n) | Определяет количество цифр (n-1) в дробной части числа | r=171 | |
oct | Вывод величин в восьмеричной системе счисления (для этого нужно снять флаг вывод в десятичной) | r=375 | |
hex | Вывод величин в шестнадцатеричной системе счисления (для этого нужно снять флаг вывод в десятичной) | p=FD | |
uppercase | Использовать прописные буквы в шестнадцатеричных цифрах | p=FD | |
nouppercase | Использовать строчные буквы в шестнадцатеричных цифрах | p=1.466730e+002 | |
fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |