Форматирование данных

При выполнении вычислений требуется не только вывести результат, но и придать ему форму удобную для восприятия и анализа. Придание требуемой формы выводимой информации называется форматированием (formatting). Не путать с форматированием дисков!

Простейшее форматирование состоит в своевременных переходах на новую строку, установлении пробелов между числами, но этого совершенно недостаточно. Существует ряд приемов, позволяющих располагать выводимую информацию в желаемом виде. В языке С++ эти приемы могут быть реализованы с помощью специальных инструментов, называемых манипуляторами. Для пользования манипуляторами необходимо к программе еще подключить библиотечный файл iomanip. h. Он содержит различные манипуляторы, основные из них приведены в таблице 1.

Манипуляторы включаются в поток таким же способом, что и обычные переменные.

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

Этот манипулятор предназначен для установки признака окончания строки (end line) и перевода в начало следующей строки. Пример применения:

cout << a <<” ”<< b << endl;

Таблица 1. Манипуляторы

 

Манипулятор Назначение
еndl Окончание строки и переход к началу следующей.
setw(n) Резервирование n позиций для выводимого данного.
setfill(символ) Установка символа – заполнителя.
setprecision(n) Резервирование n позиций для дробной части числа.
setiosflags(флаг) Установка флагов ввода/вывода.
resetiosflags( ) Очистка флагов ввода/вывода.

 

Манипулятор setw( n)

Он позволяет резервировать необходимое количество позиций под выводимое число или количество пробелов. Имеет разовое действие. Его область действия распространяется на то данное, которое помещается в потоке непосредственно после него. Например:

cout << setw(6) << a << “ “ << setw(10) << b;

Здесь первый манипулятор setw(6) действует только на переменную a , второй – на переменную b. По умолчанию заказывается 0 позиций под выводимое число. То есть setw(0). При выводе числа эта установка игнорируется и используется столько позиций, сколько необходимо под выводимое число. Это же происходит, когда заказывается меньше позиций, чем требуется. Если же позиций заказывается больше требуемых, то неиспользуемые позиции замещаются пробелами слева от выводимого числа.

Манипулятор setfill( )

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

cout << setfill(*) ; cout << setw(6) << a;

Будет распечатано: ****15

Под число a заказано 6 позиций, но использованы только две. Остальные четыре позиции заполнились символом * .

Область действия манипулятора setfill( ) распространяется на все последующие операции вывода. Чтобы отменить его действие необходимо заказать установку этим манипулятором символ пусто. То есть setfill(` ` ).

Манипулятор setprecision(n)

Этот манипулятор позволяет резервировать количество позиций под дробную часть вещественного числа. Например:

cout << setw(7) << setprecision(4) << a;

Этот оператор вывода предписывает зарезервировать 7 позиций для числа a, из них 4 позиции под дробную часть. Если количество позиций заказано меньше, чем имеет дробная часть числа, то лишние разряды справа отсекаются. Если же число имеет меньше разрядов в дробной части, чем заказано, то неиспользованные позиции резервируются пробелами справа. Область действия манипулятора распространяется на все выводимые числа до тех пор, пока не будет установлена этим манипулятором другая точность.

Манипулятор setiosflags( )

Этот манипулятор предназначен для установки флагов. Флаг – это определенное предписание для установления требуемой формы представления чисел. Перечень основных флагов приведен в таблице 2.

 

Таблица 2

Флаг Назначение
skipws Игнорирование пробелов в потоке вывода.
left Выравнивание по левой границе.
right Выравнивание по правой границе.
fixed Представление чисел с фиксированной точкой.
scientific Представление чисел с плавающей точкой (экспоненциальный формат).
showpoint Представление целых чисел с фиксированной точкой (с нулевой дробной частью).

Синтаксис установки флага:

cout << setiosflags(ios::флаг);

Например, для выравнивания столбца чисел по левой границе необходимо установить флаг left. Это делается следующим образом

cout << setiosflags(ios::left);

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

Установка флага будет действовать до тех пор, пока не будет отменена оператором

cout << resetiosflags(ios::left);