Форматирующие функции-элементы

 

Функции для форматирования, имеющиеся в классе ios, перегружены, чтобы обеспечить возможность как чтения, так и установки управляющего атрибута. Часто для атрибутов, которыми можно управлять с помощью функций, библиотека потоков С + + предусматривает также МАНИПУЛЯТОРЫ. Ниже описываются атрибуты, для управления которыми в классе ios имеются функции-элементы.

 

Ширина поля

Для чтения и управления ширины поля потока в классе ios имеется функция width. Она перегружена : int ios : .width ( ) возвращает текущее значение внутренней переменной ширины поля потока;

int ios :: width (int) устанавливает значение переменной ширины поля.

Дополнительная информация:

· При вводе widthможет быть использована для задания максимального числа читаемых символов.

· Применяемая при выводе width задает минимальную ширину поля.

· Если ширина поля меньше заданной, вывод дополняется символами fill. (Например, пробелами).

· Если выходное поле больше указанного, значение widthигнорируется.

· По умолчанию значение widthравно нулю (выход не дополняется и не обрезается).

· width обнуляется после каждого помещения данных в поток.

Примеры:

cin. width (MAX_LEN);

cout. width ( 4 );

 

Заполняющий символ

 

Для чтения или изменения текущего заполняющего символа можно применить функцию ios ::fill( ). Эта функция тоже перегружена.

char ios:: fill (char) – устанавливает внутренний заполняющий символ потока и возвращает его предыдущее значение.

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

Пример: cout. fill (‘ * ’);

 

Число цифр (точность) вещественных чисел

 

Функция ios:: precision ( ) применяется при выводе чисел с плавающей точкой, позволяя читать или устанавливать текущее число значащих цифр.

int ios:: precision ( )- возвращает текущее значение точности.

int ios:: precision (int) – устанавливает внутреннюю переменную точности вещественных чисел потока и возвращает прежнее значение.

Дополнительная информация:

· По умолчанию точность равна 6цифрам.

· Если установлен флаг scientific или fixed, то precision задает число цифр, выводимых после десятичной точки.

Если не установлен ни один из этих флагов, то precision задаёт общее число значащих цифр.

Примеры:

cout. precision (4); //Всего 4 цифры.

cout. setf (ios :: fixed, ios :: floatfield); //Установили флаг fixed.

cout. precision (4); //4 цифры // после десятичной точки.

 

Флаги форматирования

В потоках С + + имеются флаги форматирования. Они задают, каким образом форматируется ввод и вывод. Флаги являются битовыми полями, хранящимися в переменной типа long. Одной из функций, используемых для установки флагов, является setf ( ). Она перегружена. Один из ее заголовков имеет вид

long ios :: setf (long);

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

Функция long ios :: unsetf (long) сбрасывает флаги, биты которых установлены в параметре; возвращает прежнее значение всех параметров.

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

Например,

cout. setf (ios :: showbase | ios :: hex);

cout. seft (ios :: fixed);

 

Некоторые флаги формата

 

ios :: right – данные при выводе выравниваются по правой границе поля.

ios :: dec, ios :: oct, ios :: hex – числа выводятся соответственно в «10», «8» или «16» системах исчисления.

ios :: showbase – при выводе чисел добавляется индикатор основания (Ø х для 16-ричных и Ø для 8-ричных).

ios :: fixed, ios :: scientific – вещественные числа выводятся соответственно с фиксированной или плавающей точкой.

ios :: uppercase – буквы от А до F в 16-ричных числах выводятся в верхнем регистре.

 

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

 

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

Однако применение манипуляторов не ограничивается модификациями формата ввода/вывода.

За исключением setw, изменения, внесенные манипуляторами, сохраняются до следующей установки.

 

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

 

Манипуляторы, не требующие указания аргументов, называются простыми. Наиболее часто употребляются следующие предопределенные простые манипуляторы:

endl– помещает в выходной поток символ новой строки (\’ n’) и вызывает

манипулятор flush. Применяется перед вводом символа или символьной строки.

еndsпомещает в выходной поток нулевой символ (‘\ Ø’). Обычно используется для указания конца строки.

flush – принудительно записывает все выходные данные на соответствующие физические устройства.

dec, oct, hex – устанавливают соответственно «10», «8», «16» системы счисления.

Примеры:

cout <<”hex x =” << hex << x <<’ \ n’;

Значение х выводится в 16-ричной системе.

cout <<”oct x = ” << oct << x <<’ \ n’;

Вывод х в 8-ричной системе.

char name [2Ø];

 

cout << ”Введите имя” <<endl;

cin >> name;

Здесь перед вводом строки символов используется манипулятор endl.