Флаги | Положение | Умолчание | Описание действий при установленном бите |
skipws | 0x0001 | + | при извлечении пробельные символы игнорируются |
test | 0x0002 | выравнивание по левому краю | |
right | 0x0004 | + | выравнивание по правому краю |
internal | 0x0008 | знак числа выводится по левому краю, а число по правому. Промежуток заполняется символами Х (по умолчанию – пробелами) | |
dec | 0x0010 | + | десятичная система счисления |
oct | 0x0020 | восьмеричная | |
hex | 0x0040 | шестнадцатеричная | |
showbase | 0x0080 | вывод основания системы счисления: 0х – шестнадцатеричная 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