Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование флагов форматирования.Содержание книги
Поиск на нашем сайте В этой таблице перечислены флаги форматирования.
Замечания: 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> using namespace std; Int main () { setlocale (0, ""); cout << 255 << endl; // На экране видим 255 -по умолчанию установлен флаг dec cout.setf (ios:: hex); // Включаем флаг hex - хотим видеть на экране ff cout << 255 << endl; // На экране видим 255 - изменений не произошло system ("Pause"); return 0; }
В этом примере установка флага hex не привела ни к каким изменениям. Причиной этого явилось то, что одновременно с установленным флагом hex остался установленным и флаг dec. Для исправления ситуации необходимо сначала отключить флаг dec, а затем уже установить флаг hex:
cout.unsetf (ios:: dec); // Отключаем флаг dec cout.setf (ios:: hex); // Включаем флаг hex - хотим видеть на экране ff cout << 255 << endl; // На экране видим ff - то, что хотели Среди всех флагов можно выделить три группы, в каждой из которых флаги управляют одной и той же характеристикой ввода / вывода, но являются взаимоисключающими. Флагам каждой из этих групп в классе ios присвоены обобщающие имена:
Обобщающие имена групп удобно использовать для выполнения операции со всеми флагами группы, например, для сброса всех флагов группы:
cout.unsetf (ios:: basefield ); // Отключаем флаги dec , oct , hex за один прем
Более того, функцию setf можно использовать с двумя параметрами:
setf ( новые флаги, маска )
В этом случае функция setf устанавливает только те флаги, которые одновременно присутствуют и в первом и во втором параметре, а те флаги, которые присутствуют во втором параметре, но отсутствуют в первом, будут сброшены. Это дает возможность отключать и включать флаги за один вызов функции setf. Например, для установки любого флага из группы basefield достаточно использовать всего один оператор:
cout.setf (ios:: hex, ios:: basefield);
Здесь второй параметр содержит три флага: dec , oct , hex . Первый параметр содержит флаг hex. Этот флаг будет установлен, а флаги dec и oct будут сброшены. В классе cout имеются еще несколько функций управляющих форматом вывода данных. К ним относятся: · precision - определяет точность представления вещественных значений; · width - устанавливает ширину поля вывода; · fill - определяет символ заполнения при выводе данных. Примеры использования этих функций
Пример 1.
cout.width (10); //Ширина поля вывода 10 позиций cout << 123 << endl; // На экран выведено 7 пробелов и число 123 cout.fill (‘.’); // Символ заполнения ‘.’ cout.width (10); //Ширина поля вывода 10 позиций cout << 123 << endl; // На экран выведено …….123
Пример 2
cout.width (10); //Ширина поля вывода 10 позиций cout.setf (ios:: fixed); //Вывод вещественных значений с фиксированной точкой cout.precision (3); //Ширина поля вывода 10 позиций cout << 1.2345 << endl; // На экран выведено 7 пробелов и число 1.234 cout.fill (‘.’); // Символ заполнения ‘.’ cout.width (10); //Ширина поля вывода 10 позиций cout << 123 << endl; // На экран выведено …….123
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2017-02-07; просмотров: 402; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.01 с.) |