Использование флагов форматирования.

В этой таблице перечислены флаги форматирования.

 

Флаг Числовое значение Назначение Действие
ios:: skipws Отменяет ввод из потока лидирующих пробельных символов (пробелов, символов табуляции, символов перевода строки). Установлен по умолчанию. ввод
ios:: unitbuf Если буфер вывода не пуст, его содержимое передаются на устройство вывода сразу при завершении операции вывода. вывод
ios:: uppercase Отображает шестнадцатеричные цифры и символ экспоненты при выводе вещественных значений в верхнем регистре. вывод
ios:: showbase Отображает обозначение основания системы счисления, в которой выводится числовое значение. Например, если выводится значение A1F, то оно будет выведено в виде 0xA1F. вывод
ios:: showpoint Отображает при выводе вещественных значений десятичную точку и нули дробной части, даже если дробная часть отсутствует. вывод
ios:: showpos Приводит к отображению знака + при выводе положительных числовых значений. вывод
ios:: left Выравнивает вывод данных по левому краю поля вывода, дополняя данные справа пробелами (или установленными символами) до ширины поля вывода. вывод
ios:: right Выравнивает вывод данных по правому краю поля вывода, дополняя данные слева пробелами (или установленными символами) до ширины поля вывода вывод
ios:: internal Выводит знак числа с левым выравниванием, а само число с правым выравниванием. Между знаком и самим числом выводятся либо пробелы, либо установленные символы заполнения, дополняя выводимое значение до ширины поля вывода. вывод
ios:: dec Устанавливает десятичную форму представления целых чисел. Флаг установлен по умолчанию. ввод/вывод
ios:: oct Устанавливает восьмеричную форму представления целых чисел. ввод/вывод
ios:: hex Устанавливает шестнадцатеричную форму представления целых чисел. ввод/вывод
ios:: scientific Устанавливает формат вывода вещественных значений в формате с экспонентой. По умолчанию компилятор сам выбирает формат вывода (либо экспоненциальный, либо фиксированный). вывод
ios:: fixed Устанавливает формат вывода вещественных значений с фиксированной точкой. По умолчанию компилятор сам выбирает формат вывода (либо экспоненциальный, либо фиксированный). вывод
ios:: boolalpha По умолчанию логические значения представляются в виде 0 и 1. При установке этого флага эти значения представляются словами false и true. ввод/вывод

 

Замечания:

1. Приставка ios::указывает на то, что определение флага принадлежит классу ios, опускать ее не следует, иначе компилятор выдаст ошибку.

2. Некоторые компиляторы (старые) могут не воспринимать представления этих флагов в виде идентификаторов. В этом случае необходимо использовать их числовые эквиваленты.

3. По сути, каждый флаг можно рассматривать как целочисленную именованную константу. Все эти константы определены в классе ios.

Флаги работают как переключатели (включен - выключен, установлен - сброшен). Все флаги упакованы в одном целом значении типа long int. Это целое значение определяет общее состояние всех флагов потока. Каждый флаг в этом целом значении представлен 1 битом (1 двоичным разрядом). Установленному флагу соответствует значение 1 некоторого двоичного разряда. Если флаг сброшен (отключен), соответствующий двоичный разряд равен 0. Например, если значение состояния всех флагов равно 68, то установлены флаги uppercase и left:

 

Номер разряда: 31 30 … 8 7 6 5 4 3 2 1 0

Состояния флагов: 0 0 … 0 0 1 0 0 0 1 0 0 = 68

 

Такое представление флагов позволяет, кроме компактной формы хранения, обеспечить эффективное управление флагами на основе использования побитовых логических операций.

Для управления флагами используются три функции: flags, setf и unsetf. Эти функции являются членами потоковых классов cout и cin, поэтому обращаться к ним следует через идентификаторы соответствующих потоковых классов: cout.flags, cout.setf, cout.unsetf или cin.flags, cin.setf, cin.unsetf. Если необходимо управлять флагами потока вывода, используется класс cout, если флагами потока ввода - класс cin. Все эти функции возвращают предыдущее состояние флагов.

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

cout << cin.flags () << endl;

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

cout << cout.flags () << endl;

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

Эту функцию можно использовать и для изменения состояния флагов. Для этого при ее вызове в качестве параметра ей необходимо передать необходимое значение флага (флагов). Например, оператор cout.flags(ios::hex);установит флаг hex, все остальные флаги будут сброшены.

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

Замечание. Если вызвать функцию следующим образом: flags(0), то будут сброшены все флаги соответствующего потока.

Функция setf также служит для установки флагов. Она добавляет новый флаг (флаги) без изменения всех остальных.

 

/* 1 */ cout.flags(0);// Отключены все флаги

/* 2 */ cout.setf(ios :: showpos); // Установлен единственный флаг showpos

/* 3 */ cout.setf(ios :: hex); // Установлены два флага - showpos и hex

 

Если требуется сбросить флаг (флаги), используют функцию unsetf. В качестве параметра используется значение флага (флагов), который необходимо отключить. При этом остальные флаги изменены не будут. Например, если добавить к предыдущим строкам программы строку:

 

/* 4 */ cout.unsetf(ios :: showpos);

 

флаг showpos будет отключен, и останется установленным только флаг hex.

При использовании этих процедур можно оперировать не одиночными флагами, а объединением нескольких флагов. Например, строки 2 и 3 можно заменить одной строкой:

 

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

Объединение флагов осуществляется с помощью операции | - арифметическое ИЛИ.

 

Рассмотрим некоторые примеры использования флагов форматирования.

 

#include <iostream>








Дата добавления: 2019-02-07; просмотров: 298;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.