Анимация
JavaScript
|
Главная Библионтека Сброс флага uppercase std: -.cout.unsetf (std: :ios: :uppercase): Функция flags() позволяет работать со всеми форматными флагами сразу. Вызов flags() без аргумента возвратцает текущие форматные флаги. При вызове flags() с передачей аргумента этот аргумент интерпретируется как новое состояние всех форматных флагов, а функция возвращает старое состояние. Следовательно, при вызове flags() с аргументом все флаги сбрасываются, а устанавливаются только переданные флаги. Например, при помощи функции flags() можно сохранить текущее состояние флагов для последующего восстановления. В следующем фрагменте показано, как это делается: using std::ios. std::cout: Сохранение текущих форматных флагов ios: :fmtflags oldFlags - cout.flagsO; Изменение состояния флагов cout.setf(ios::showpos ios 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 <iostream> #include <ionian1p> 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 Включает числовое представление (сброс флага los::boolalpha) Например, следующий фрагмент выводит переменную b сначала в числовом, а затем в текстовом представлении: bool b; cout « noboolalpha « b « " -= " « boolalpha « b « endl; Ширина поля, заполнитель, выравнивание Функции widthO и flll() определяют ширину поля и заполнитель (табл. 13.13). Таблица 13.13. Функции для работы с шириной поля и заполнителем Функция Описание widthQ Возвращает текущую ширину поля width(val) Задает ширину поля равной val и возвращает предыдущую ширину поля fill() Возвращает текущий заполнитель flll(c) Назначает новый и возвращает предыдущий заполнитель Использование при выводе ширины поля, заполнителя и выравнивания при выводе функция width() определяет минимальную ширину поля. Определение относится только к следующему выводимому форматированному полю. При вызове без аргументов width() возвращает текущую ширину поля. При вызове с целочисленным аргументом функция width() изменяет ширину поля и возвращает ее предыдущее значение. По умолчанию минимальная ширина равна 0; это означает, что размер поля может быть произвольным. Такое значение устанавливается после вывода. Ширина поля не может использоваться для сокращения вывода. То есть максимальную ширину поля задать невозможно. Вместо этого ее придется самостоятельно запрограммировать, например, записав данные в строку и ограничив вывод определенным количеством символов. Функция fill() определяет символ, используемый для заполнения промежутков между отформатированным представлением величины и позицией, отмечающей минимальную ширину поля. По умолчанию заполнителем является пробел. Тип выравнивания данных внутри поля определяется тремя флагами, перечисленными в табл. 13.14. Эти флаги определяются в классе ios base вместе с соответствующей маской. Таблица 13.14. Флаги типа выравнивания Маска Флаг Описание adjustfieid left Выравнивание по левому краю right Выравнивание по правому краю Internal Выравнивание знака по левому краю, а значения - по правому краю нет Выравнивание по правому краю (по умолчанию) После выполнения любой операции форматированного ввода-вывода восстанавливается ширина поля по умолчанию. Заполнитель и тип выравнивания остаются без изменений до тех пор, пока они ие будут модифицированы явно. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 [ 191 ] 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |