Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 333; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.145.168 (0.007 с.) |