АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Класс ios. Флаги форматирования. Манипуляторы класса ios. Функции класса ios

Читайте также:
  1. Biglnteger Классы
  2. FIRM-карта классификации рисков
  3. I. КЛАССИЧЕСКАЯ МЕХАНИКА
  4. II. Основные задачи и функции
  5. II.2. Классическая греческая философия.
  6. II.8. Немецкая классическая философия.
  7. III Классический отрезок
  8. III. Предмет, метод и функции философии.
  9. IV класс.
  10. IV. ПРИСВОЕНИЕ КВАЛИФИКАЦИОННОГО РАЗРЯДА, КЛАССНОГО ЧИНА, ДИПЛОМАТИЧЕСКОГО РАНГА, ВОИНСКОГО ЗВАНИЯ
  11. IX.4. Классификация наук
  12. MxA классификация

Ios является дедушкой всех потоковых классов и обладает большинством осо-
бенностей, без которых работа с потоками была бы невозможна. Три его главных
направления — это флаги форматирования, флаги ошибок и режим работы с фай-
лами. Сначала мы обратимся к рассмотрению флагов форматирования, затем
флагов состояния ошибки. Рассмотрение режима работы с файлами мы отложим
до тех пор, пока не познакомимся с дисковыми файлами.

Флаги форматирования

Флаги форматирования — это набор определений enum (перечисляемого типа)
в классе ios. Они работают переключателями, определяющими различные фор-
маты и способы ввода/вывода. Мы не будем обсуждать подробно каждый флаг,
так как одни мы уже использовали, а названия других говорят сами за себя. Не-
которые мы обсудим позднее в этой же главе. В табл. 12.1 приводится полный
список флагов форматирования.

Таблица 12.1. Флаги форматирования класса ios  
Флаг Значение
skipws Пропуск пробелов при вводе
left Выравнивание по левому краю
right Выравнивание по правому краю
internal Заполнение между знаком или основанием числа и самим числом
dec Перевод в десятичную форму
oct Перевод в восьмеричную форму
hex Перевод в шестнадцатеричную форму
boolalpha Перевод логического 0 и 1 соответственно в «false» и «true»
showbase   Выводить индикатор основания системы счисления (0 для восьмеричной, Ох для шестнадцатеричной)
showpoint Показывать десятичную точку при выводе
uppercase Переводить в верхний регистр буквы X, Е и буквы шестнадцатеричной системы счисления (ABCDEF) (по умолчанию — в нижнем регистре)
showpos Показывать «+» перед положительными целыми числами
scientific Экспоненциальный вывод чисел с плавающей запятой
fixed Фиксированный вывод чисел с плавающей запятой
unitbuf Сброс потоков после вставки
stdio сброс stdout, sterror после вставки

 

Есть несколько способов установки флагов форматирования, для каждого
свои. Так как они являются компонентами класса ios, обычно к ним обращаются
посредством написания имени класса и оператора явного задания (например,
ios::skipws). Все без исключения флаги могут быть выставлены с помощью мето-
дов setf() и unsetf(). Взгляните на следующий пример:

cout.setf(ios::left); //выравнивание текста по левому краю

cout << "Этот текст выровнен по левому краю"

cout.unsetf(ios::left); //вернуться к прежнему форматированию

Многие флаги могут быть установлены с помощью манипуляторов, давайте
рассмотрим их.

Манипуляторы

Манипуляторы — это инструкции форматирования, которые вставляются прямо
в поток. Мы уже видели некоторые из них, например endl, который посылает
символ разделителя строк в поток и сбрасывает буфер:

cout << "Jedem Das Seine." << endl;

Мы встречали в программе SALEMON, глава 7 «Массивы и строки», манипуля-
тор setiosflags(). Вспомним, как он выглядит:

cout << setiosflags(ios::fixed) //использовать

//фиксированный вывод
<< setiosflags(ios::showpoint) //показывать десятичную

//точку

<< var;

Как показывают эти примеры, манипуляторы бывают двух видов — с аргу-
ментами и без. В табл. 12.2 сведены вместе все важные манипуляторы без аргу-
ментов.

Таблица 12.2. Манипуляторы ios без аргументов
Манипулятор Назначение
ws Включает пропуск пробелов при вводе
dec Перевод в десятичную форму
oct Перевод в восьмеричную форму
hex Перевод в шестнадцатеричную форму
endl Вставка разделителя строк и очистка выходного потока
ends Вставка символа отсутствия информации для окончания выходной строки
flush Очистка выходного потока
lock Закрыть дескриптор файла
unlock Открыть дескриптор файла

 

Вставляются эти манипуляторы прямо в поток. Например, чтобы вывести var
в шестнадцатеричной форме, надо указать:

cout << hex << var;

Имейте в виду, что манипуляторы действуют только на те данные, которые
следуют за ними в потоке, а не на те, которые находятся перед ними. На то он и
поток. В табл. 12.3 представлены важнейшие из манипуляторов с аргументами.
Для доступа к этим функциям вам потребуется заголовочный файл IOMANIP.

Таблица 12.3. Манипуляторы ios с аргументами

Манипулятор Аргумент Назначение
setw() ширина поля (int) Устанавливает ширину поля для вывода данных
Setfill() символ заполнения (int) Устанавливает символ заполнения (по умолчанию, пробел)
setprecision() точность (int) Устанавливает точность(число выводимых знаков)
setiosflags() Флаги форматирования (long) Устанавливает указанные флаги форматирования
resetiosflags() Флаги форматирования (long) Сбрасывает указанные флаги форматирования

 

Функции

Класс ios содержит набор функций, с помощью которых можно выставлять
флаги форматирования и выполнять некоторые другие действия. Таблица 12.4
содержит большинство этих функций, кроме тех, которые обрабатывают ошиб-
ки. К последним мы обратимся позднее.

Таблица 12.4. Функции ios

Функция Назначение
ch=fill(); Возвращает символ заполнения (символ, которым заполняется неиспользуемая часть текстового поля; по умолчанию — пробел)
fill(ch); Устанавливает символ заполнения
p=precision(); Возвращает значение точности (число выводимых знаков для формата с плавающей запятой)
precision(p); Устанавливает точность р
w=width(); Возвращает текущее значение ширины поля (в символах)
width(w); Устанавливает ширину текущего поля
setf(flags); Устанавливает флаг форматирования (например, ios::left)
unsetf(flags); Сбрасывает указанный флаг форматирования
setf(flags, field); Очищает поле, затем устанавливает флаги форматирования

 

Эти функции вызываются для нужных потоковых объектов обычным спосо-
бом — через точку. Например, чтобы установить ширину поля 12, можно написать:

cout.width(14);

Следующее выражение делает символом заполнения звездочку (как при тес-
тировании печати):

cout.fill('*');

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


cout.setf(ios:: left);

Чтобы восстановить выравнивание по правому краю, напишем:

cout.unsetf(ios::left);

Версия setf() с двумя аргументами использует второй из них для сбрасы-
вания всех флагов указанного типа (в поле). При этом установится флаг, ука-
занный в качестве первого аргумента. Таким образом, проще сбросить флаги
перед установкой нового. В табл. 12.5 показан способ обращения с этой функ-
цией.

Например,
cout.setf(ios::left, ios::adjustfield);

сбрасывает все флаги, связанные с выравниванием текста, а затем устанавливает
флаг left для выравнивания по левому краю.

Таблица 12.5. Версия setf() с двумя аргументами

Первый аргумент: устанавливаемые флаги Второй аргумент: сбрасываемые флаги
dec, oct, hex basefield
left, right, internal adjustfield
scientific, fixed floatfield

 

С использованием указанной техники можно создать способ форматирован-
ного ввода/вывода не только с клавиатуры и на дисплей, но, как мы увидим
позднее в этой главе, также и для файлов.

 


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 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)