Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Форматирование данных при обменах с потоками.

Бибилиотека потоков предусматривает три способа управления форматированием: при помощи функций-членов, при помощи флагов и посредством манипуляторов.

Функции-члены класса ios (непосредственного предка классов istream и ostream) перегружены, что позволяет им и устанавливать, и анализировать переметры потока. Нпаример,

int ios::width()

- возвращает текущее значение ширины поля потока;

int ios::width(int)

- устанавливает ширину поля.

При вводе ширина поля задает максимальное число читаемых элементов, при выводе - минимальное пространство, занимаемое выводимым значением. Если ширина значения превышает ширину поля, последняя игнорируется. По умолчанию ширина поля равна нулю. Ширина поля обнуляется после каждого помещения данных в поток.

char ios::fill();

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

char ios::fill(char);

- устанавливает новый символ заполнения и возвращает значение старого. По умолчанию заполняющим символом является пробел.

int ios::precision();

- возвращает текущее значение точности.

int ios::precision(int);

- устанавливает новое значение точности и возвращает старое. По умолчанию точность равна 6 цифрам. Если установлен флаг scientific или fixed, точность задает число цифр, выводимых после десятичной точки, иначе - общее число значащих цифр.

Флаги форматирования. Флаги являются битовыми полями, хранящимися в защищенной компоненте данных ios::x_flags. Следующие компоненты функции управляют флагами формата.

long ios::flags() - возвращает текущие флаги потока.

long ios::flags(long) - устанавливает новое значение

флагов и возвращает старое.

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

установлены в параметре, возвращает прежнее значение флагов.

long ios::unsetf(long) - сбрасывает флаги, биты которых

установлены в параметре, возвращает прежнее значение флагов.

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

ends

- помещает в выходной поток нулевой символ;

endl

помещает в выходной поток символ конца строки и вызывает метод flush;

flush

выгружает буфер потока;

dec, hex, oct

устанавливают основания 10, 16 и 8 соответственно;

ws

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

Манипуляторы могут получать параметры.

setbase(int_b)

задает основание системы счисления;

resetiosflags(long_b)

сбрасывает флаги, указанные в параметре;

setiosflags(int_b)

устанавливает флаги, указанные в параметре;

setfill(int_f)

задает заполняющий символ;

setprecision(int_n)

задает точность вещественных чисел;

setw(int_n)

задает ширину поля.

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