русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-04-05; просмотров: 890; Нарушение авторских прав


По сути, каждый флаг можно рассматривать как целочисленную именованную константу. Все эти константы определены в классе 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 присвоены обобщающие имена:

 

Группа Флаги Обобщающее имя
Флаги основания систем счисления dec, oct, hex basefield
Флаги выравнивания left, right, internal adjustfield
Флаги формата вещественных значений scientific, fixed floatfield

 

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

 

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

 

Форматирование ввода-вывода с помощью манипуляторов.

 

Управление флагами потоков ввода-вывода можно осуществлять с помощью, так называемых, манипуляторов ввода-вывода. В следующей таблице перечислены стандартные манипуляторы:

 

Манипулятор Назначение Действие
skipws Устанавливает флаг skipws. ввод
noskipws Обнуляет флаг skipws. ввод
unitbuf Устанавливает флаг unitbuf. вывод
nounitbuf Обнуляет флаг unitbuf. вывод
uppercase Устанавливает флаг uppercase. вывод
nouppercase Обнуляет флаг uppercase. вывод
showbase Устанавливает флаг showbase. вывод
noshowbase Обнуляет флаг showbase. вывод
showpoint Устанавливает флаг showpoint. вывод
noshowpoint Обнуляет флаг showpoint. вывод
showpos Устанавливает флаг showpos. вывод
noshowpos Обнуляет флаг showpos. вывод
left Устанавливает флаг left. вывод
right Устанавливает флаг right вывод
internal Устанавливает флаг internal. вывод
dec Устанавливает флаг dec. ввод/вывод
oct Устанавливает флаг oct. ввод/вывод
hex Устанавливает флаг hex. ввод/вывод
scientific Устанавливает флаг scientific. вывод
fixed Устанавливает флаг fixed. вывод
boolalpha Устанавливает флаг boolalpha. ввод/вывод
noboolalpha Обнуляет флаг boolalpha. ввод/вывод
endl Выводит в поток символ перевода строки. вывод
ends Выводит в поток нулевой символ (‘\0’). вывод
flush «Сбрасывает» поток. вывод
resetiosflags(флаги) Обнуляет флаги, указанные в параметре ввод/вывод
setiosflags(флаги) Устанавливает флаги, указанные в параметре ввод/вывод
setbase(int base) Устанавливает основание системы счисления в значение base (допустимые значения параметра 8, 10, 16). вывод
setfill(char ch) Устанавливает символ для заполнения в значение ch. вывод
setprecision(int p) Устанавливает количество цифр после десятичной точки в значение p. вывод
setw(int w) Устанавливает ширину поля вывода в значение w. вывод
ws Пропускает ведущие пробельные символы в потоке ввода ввод

 

Замечание. При использовании манипуляторов с параметрами необходимо использовать заголовочный файл <iomanip>.

Манипуляторы ввода-вывода непосредственно включаются в потоки ввода-вывода. Например:

 

cout << setw(20) << right << setfill(‘.’) << 123 << endl;

 

На экран будет выведено:

 

……………..123

 

Можно создавать свои собственные манипуляторы ввода-вывода.

4. Основные управляющие структуры программирования и управляющие конструкции в языке С++

 

Структурное программирование. Основные управляющие структуры программирования: последовательность, выбор (ветвление), итерации (циклы). Примеры преобразования структур. Семантика управляющих структур и инструкции языка С++. Операторы и блоки. Выбор вариантов: оператор if, расширение оператора if, множественный выбор. Итерации: цикл с предусловием, цикл с постусловием.

4.1. Идеи структурного программирования

 

При хаотическом программировании возникают очень серьезные отрицательные последствия:

Затруднено восприятие программы (алгоритма);

Сложно проводить доказательство правильности программы, ее отладку, тестирование;

Практически невозможна модификация программы;



<== предыдущая лекция | следующая лекция ==>
Ввод вещественных типов данных можно осуществлять либо в формате с фиксированной точкой, либо в экспоненциальном формате. | При отсутствии систематических приемов в программировании очень сложно организовать коллективную работу над общей задачей.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.255 сек.