Программирование >>  Операторы преобразования типа 

1 ... 188 189 190 [ 191 ] 192 193 194 ... 239


Здесь представлены форматные флаги, а аспекты форматирования, относящиеся к интернационализации программ, описаны на с. 601 и в главе 14.

Форматные флаги

Класс ios base содержит ряд переменных, предназначенных для определения форматов ввода-вывода. В частности, эти переменные определяют минимальную ширину поля, точность вывода вещественных чисел и заполнитель. Переменная типа ios::fmtflags содержит флаги конфигурации, которые определяют, нужно ли выводить знак перед положительными числами, должны ли логические значения выводиться в числовом или в символьном виде, и т. д.

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

В табл. 13.9 перечислены функции, предназначепные для работы со всеми определениями форматов для потоков данных.

Таблица 13.9. Название таблицы Функция Описание

5е1Г(флаги) Устанавливает флаги, переданные в аргументе, в качестве

дополнительных форматных флагов и возвращает предыдущее состояние всех флагов

5е1Г(флаги, маска) Устанавливает флаги, переданные в первом аргументе, в качестве новых форматных флагов для группы, которая идентифицируется маской, переданной во втором аргументе, и возвращает предыдущее состояние всех флагов

ип5е11Хфлаги) Сбрасывает флаги, переданные в арг/менте

flags() Возвращает весь набор форматных флагов

Лад5(флаги) Устанавливает флаги, переданные в аргументе, в качестве новых

форматных флагов и возвращает предыдущее состояние всех флагов

сору(поток) Копирует все определения форматов из потока, переданного в аргументе

Функции setf() и unsetf() соответственно устанавливают и сбрасывают один или несколько флагов. Чтобы операция выполнялась сразу с несколькими флагами, следует объединить их оператором (поразрядная дизъюнкция). Во втором аргументе функции setf() может передаваться маска, по которой сбрасываются все флаги группы перед установкой флагов, передаваемых в первом аргументе (и также офаниченных группой). Такая возможность не поддерживается версией setf(), вызываемой с одним аргументом. Пример:

Установка флагов showpos и uppercase

std::cout.setf (std::1os::showpos std::1os::uppercase):

Установка только флага hex в группе basefield std:-.cout.setf (std: ;ios: :hex. std: :1os: :basef1eld);



Сброс флага uppercase

std: -.cout.unsetf (std: :ios: :uppercase):

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

using std::ios. std::cout:

Сохранение текущих форматных флагов ios: :fmtflags oldFlags - cout.flagsO;

Изменение состояния флагов cout.setfdos: :showpos 1os cout.setfdos: :lnternal. Ios cout std::hex x std

showbase Ios::uppercase): adjustfield); endl:

Восстановление сохраненных форматных флагов cout.flags(oldFlags);

Функция copyfmt() позволяет скопировать состояние форматных флагов из одного потока данных в другой. Пример приведен иа с. 627.

Установка и сброс форматных флагов могут производиться при помопш манипуляторов, представленных в табл. 13.10.

Таблице 13.10. Манипуляторы для работы с форматными флагами Манипулятор Описание

5е1105Пад5(флаги) Устанавливает форматные флаги, переданные в аргументе, путем вызова функции setf(флаги) для потока данных

resetiosflags(MacKa) Сбрасывает все флаги группы, определяемой значением маски, путем вызова функции setf(0, маска) для потока данных

Манипуляторы setiosflags() и resetiosfIags() дают возможность соответственно установить или сбросить один или несколько флагов в командах записи или чтения с использованием оператора << или >>. Чтобы использовать эти манипуляторы в программе, в нее необходимо включить заголовочный файл <iomanip>. Пример:

#1nclude <1ostream> #include <1onian1p>



std::cout resetiosflags(std;:1os::adjustfield) Сброс выравнивания setlosflagsCstd;;ios::left): Левое выравнивание

Некоторые операции с флагами выполняются при помощи специализированных манипуляторов. Благодаря своему удобству и наглядности эти манипуляторы используются достаточно часто. Они рассматриваются далее.

Форматированный ввод-вывод логических данных

Флаг boolalpha определяет формат ввода и вывода логических значений - числовой или текстовый (табл. 13.11).

Таблица 13.11, флаг представления логических значений Флаг Описание

boolalpha При установленном флаге используется текстовое представление При сброшенном флаге используется числовое представление

Если флаг не установлен (значение по умолчанию), логические данные представляются в числовом виде. В этом случае false всегда представляется значением О, а true - значением 1. При чтении логических данных в числовом представлении наличие символов, отличных от О и 1, считается ошибкой (для потока данных устанавливается бит failbit).

При установке флага логические данные читаются и записываются в текстовом представлении. При чтении логического значения строка должна соответствовать текстовому представлению true или false. Строки, представляющие эти значения, определяются состоянием объекта локального контекста (см. с. 601 и 670). Стандартный объект локального контекста С использует для представления логических значений строки true и false .

Для удобства работы с этим флагом определены специальные манипуляторы (табл. 13.12).

Таблица 13.12. Манипуляторы представления логических данных Манипулятор Описание

boolalpha Включает текстовое представление (установка флага ios;:boolalpha)

noboolalpha Включает числовое представление (сброс флага ios::boolalpha)

Например, следующий фрагмент выводит переменную b сначала в числовом, а затем в текстовом представлении:

bool b;

cout noboolalpha b -= boolalpha b endl:



1 ... 188 189 190 [ 191 ] 192 193 194 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика