Форматирование данных с помощью флагов

Флаги Положение Умолчание Описание действий при установленном бите
skipws 0x0001 + при извлечении пробельные символы игнорируются
test 0x0002   выравнивание по левому краю
right 0x0004 + выравнивание по правому краю
internal 0x0008   знак числа выводится по левому краю, а число по правому. Промежуток заполняется символами Х (по умолчанию – пробелами)
dec 0x0010 + десятичная система счисления
oct 0x0020   восьмеричная
hex 0x0040   шестнадцатеричная
showbase 0x0080   вывод основания системы счисления: – шестнадцатеричная 0 – восьмеричная
showpoint 0x0100   при выводе вещественных чисел печатает десятичную точку и дробную часть
uppercase 0x0200   при выводе использует символы верхнего регистра
showpos 0x0400   печатает знак при выводе положительных чисел
scientific 0x0800   печатает веществ числа в форме мантиссы с порядком
fixed 0x1000   печатает вещественные числа в форме с фиксированной точкой, точность определяется полем precision
unitouf 0x2000   выгружает буферы всех потоков после каждого вывода
stdio 0x4000   выгружает буферы из потоков stdout и stderr после каждого вывода

Флаги

1) left, right, internal

2) dec, oct, hex

3) scientific, fixed

взаимно исключают друг друга, то есть в каждый момент времени может быть установлен только один флаг из каждой группы.

Для управления флагами в классе ios есть методы: flags, setf, unsetf.

· longios::flags(); - возвращает текущие флаги потока

· longios::flags(long); - присваивает флагам значения параметров

· longios::setf(long long); - присваивает флагам, биты которых в первом параметре, соответствующие значения во втором

· longios::setf(long); - устанавливает флаги, биты которых установлены в параметре

· longios::unsetf(long); - сбрасывает флаги, биты которых установлены в параметрах

 

Кроме флагов для форматирования используются следующие поля классов ios:

· int x_width – минимальная ширина поля ввода

· int x_precision – количество цифр в дробной части при выводе вещественных чисел с фиксированной точкой, либо общее количество значащих цифр при выводе числа с мантиссой и порядком

· int x_fill – символ заполнения поля ввода.

Для управления этими полями, используются методы width, precision, fill.

Int ios:: width()

возвращает значение ширины поля ввода

Int ios:: width(int)

устанавливает значение ширины поля ввода в соответствии с параметром

Int ios:: precision()

возвращает значение точности представления при выводе вещественного числа

Int ios:: precision(int)

устанавливает значение точности представления при выводе вещественного числа и возвращает старое значение точности

Char fill()

возвращает текущий символ заполнения

Char fill(char)

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

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

adjustfield(left| right| internal);

basefield(dec |oct | hex);

floatfield(scientific | fixed);

Пример 1

Пример форматирования при выводе с помощью флагов и методов:

#include<iostream.h>

Int main()

{

long a = 1000, b = 077;

cout.width(7);

cout self(ios::hex| ios::showbase| ios::uppercase);

cout << a;

cout width(7);

cout<< b << endl;

double d=0.12, c=1.3*d-4;

cout self(ios::left);

cout << d << endl;

cout << c;

return 0;

}



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

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

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

Простые манипуляторы

· dec – простой манипулятор, устанавливающий при вводе/выводе флаг десятичной системы счисления.

· oct – простой манипулятор, устанавливающий при вводе/выводе флаг восьмеричной системы счисления.

· hex – простой манипулятор, устанавливающий при вводе/выводе флаг шестнадцатеричной системы счисления.

· ws – устанавливает при вводе/выводе извлечение пробельных символов

· endl – при выводе включает в поток символ новой строки и выгружает буфер

· ends – при выводе включает в поток нулевой символ

 

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

· setbase(int n) – задает основание системы счисления;

· resetiosflags(long) – сбрасывает флаги состояния поток, биты которых установлены в параметре.

· setiosflags(long) – устанавливает флаги состояния потока биты которых в параметре равны единице.

· setfill(int) – устанавливает символ заполнитель с кодом, равным значению параметра.

· setprecision – устанавливает максимальной количество цифр в дробной части для вещественных чисел в

· форме с фиксированной точкой, либо общее число значащих цифр для чисел в форме с мантиссой и

· порядком.

· setw(int) – устанавливает максимальную ширину поля вывода.

Пример 1

#include<iostream.h>

#include<iomanip.h>

Int main()

{

double d[] = {1.234, -12.34567, 123.456789, -1.234, 0.00001};

couy<<setfil('.')<<setprecision(4)<<setioflags(ios::showpoint| ios""fixed);

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

cout << setw(12) << d[i] << endl;

return 0;

}

Результаты:

1.2340

-12.3457

123.458

-1.2340

0.0000




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: