Форматирование ввода и вывода определяется различными флагами состояний формата, перечисленными в классе 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";