Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л4.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
256 Кб
Скачать

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

Форматирование ввода и вывода определяется различными флагами состояний формата, перечисленными в классе ios. Эти состояния определяются битами числа типа long int (см. таблицу) Эти флаги читаются функцией-элементом flags, устанавливаются функцией setf() и сбрасываются функцией unsetf(). Есть два варианта функции setf():

long ios::setf(long);

long ios::setf(long, long);

Первым аргументом является набор флагов, объединенных операцией побитового ИЛИ(|) (см. таблицу). Вторым аргументом является специальная битовая маска, определяющая, какую группу флагов можно модифицировать(изменять):

Для чтения и установки текущих флагов потока используется функция:

long ios::flags();

long ios::flags(long);

В первом случае функция возвращает текущие флаги потока, а во втором – присваивает флагам значение, сообщаемое параметром, и возвращает прежнее значение флагов.

adjustfield = internal | left | right

basefield = dec | oct | hex

floatfield = fixed | scientific

Пропуск пробельных символов управляется флагом ios::skipws в перечислимой переменной состояния. Флаг skipws обычно устанавливает пропуск пробельных символов. Очистка этого флага (например, при помощи setf) выключает пропуск пробельных символов. Отметим также специальный манипулятор "приемника", ws, который позволяет игнорировать пробельные символы.

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

Флаг

Бит числа

Назначение

skipws

0x0001

пропуск пробельного символа на вводе

left

0x0002

вывод с левым выравниванием

right

0x0004

вывод с правым выравниванием

internal

0x0008

заполнитель после знака или указателя системы счисления (знак числа выводится с левого края, а число – с правого, остальное заполняется символами fill)

dec

0x0010

десятичное преобразование

oct

0x0020

восьмеричное преобразование

hex

0x0040

шестнадцатеричное преобразование

showbase

0x0080

показать на выходе указатель системы счисления

showpoint

0x0100

показать позицию десятичной точки(на выходе)

uppercase

0x0200

вывод шестнадцатеричных значений буквами верхнего регистра (экспонента также Е)

showpos

0x0400

показать знак "+" для положительных чисел

scientific

0x0800

использовать запись чисел с плавающей точкой с выводом экспоненты Е например, 12345E2

fixed

0x1000

использовать запись чисел с плавающей точкой типа 123.45

unitbuf

0x2000

буфер потока опорожняется после каждой операции помещения

stdio

0x4000

потоки stdout и stderr опорожняются после каждой операции помещения

Пример: Вывести на экран таблицу квадратов и квадратных корней чисел от 1 до 5.

#include <iostream.h>

#include <math.h>

main()

{ double n=1.0,kv,kvk ;

cout<<" число\tквадрат\t\tкорень квадратный\n";

cout<<"_________________________________________\n";

cout.setf(ios::fixed); //фиксированный формат(без экспоненты)

for(int i=0;i<=5;i++)

{

kv=n*n;

kvk=sqrt(n);

cout.fill('0'); cout.width(2);

cout. precision(0); //0 цифр после запятой

cout<<n<<'\t';

cout.fill(' '); cout<<kv<<"\t\t";

cout. precision(6); cout<<kvk<<'\n';

n++;

}

}

Результат:

число квадрат корень квадратный

_____________________________________

01 1 1.000000

02 4 1.414214

03 9 1.732051

04 16 2.000000

05 25 2.236068

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

Простой способ изменения некоторых форматных переменных состоит в использовании специальной функциональной операции, которая называется манипулятором.

Таблица. Простые манипуляторы потока

Манипулятор

Действие

dec

Установка флага форматирования с десятичными преобразованиями.

hex

Установка флага форматирования с шестнадцатиричными преобразованиями.

oct

Установка флага форматирования с восьмиричными преобразованиями.

ws

Извлечение пробельных символов.

endl

Вставка символа новой строки и очистка потока.

ends

Вставка конечного пустого символа в строку.

flush

Сброс на диск и очистка ostream

Для работы с параметризованными манипуляторами надо дополнительно подключать файл iomanip.h .

Таблица. Параметризованные манипуляторы потока

setbase(int n)

Установка системы счисления при преобразованиях с основанием n (0, 8, 10 или 16). Нуль означает по умолчанию десятичную систему при выводе и правила С для литералов целых чисел при вводе.

resetiosflags(long f)

Очистка форматных бит в ins или outs, заданных аргументом f.

setiosflags(long f)

Установка бит форматирования в ins или outs, заданных аргументом f.

setfill(int c)

Установка символа-заполнителя в c.

setprecision(int n)

Установка точности представления чисел с плавающей точкой равной n разрядам

setw(int n)

Установка ширины поля в значение n

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

22

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]