704_____________________________________________Глава 12

Результат работы этих операторов следующий:

25
25
25
25
25

Из этого результата видно, что пока ширина поля меньше числа символов в
выводимом числе, она ни на что не влияет, а при большой ширине поля происхо-
дит выравнивание числа вправо.

Такой же результат дает и следующий цикл, использующий метод width:

forfint i = 0; i < 5; i++)
(

out file.width(i) ;

outfile « j « endl;

)

Если вывести в поток модификатор setfill, то заполняющие символы изменят-
ся. Например, оператор

for(int i = 0; i < 5; i++)

outfile « setfill('*') « setw(i) « j « endl;

приведет к результату:

25
25
25

*25

**25

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

//Создание манипулятора tab
ostreams tab(ostreams output)
<

return output « ' \t' ;

}

Если вы ввели в приложение такую функцию, то в дальнейшем можете испо-
льзовать этот манипулятор. Например, оператор

outfile « 'А' « tab « 'В' « tab « 'С' « endl;

выведет символы «А», «В» и «С», разделенные символами табуляции:

А      В      С

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

В классе ios — базовом классе всех потоков ввода/вывода определены следую-
щие флаги формата.

ios::skipws     пропуск символов разделителей во входном потоке
ios:: left       выравнивание по левой границе поля
ios::right      выравнивание по правой границе поля

ios::internal    выравнивание знака или основания системы счисления по ле-
вой, а числа — по правой границам поля