Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Либерти Джесс. Освой самостоятельно С++ за 21 день. - royallib.ru.rtf
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.55 Mб
Скачать

Манипуляторы, флаги и команды форматирования

Поток вывода поддерживает установку большого количества флагов состояния, определяющих основание чисел (десятичное или шестнадцатеричное), ширину полей вывода и символы, используемые для заполнения полей. Флаг состояния представляет собой байт информации, каждый бит которого имеет специальное предназначение. Установка двоичных флагов более детально рассматривается на занятии 21. Для установки флагов потока ostream можно использовать функции-члены и манипуляторы.

Использование функции cout.Width()

По умолчанию ширина поля вывода автоматически устанавливается такой, чтобы точно вместить все символы строки из буфера вывода. Но с помощью функции width() можно установить точное значение ширины поля вывода. Эта функция вызывается как метод объекта cout, поскольку является его функцией-членом. Функция width() изменяет ширину только следующего поля вывода. Использование этой функции проиллюстрировано в листинге 16.12.

Листинг 16.12. Настройка ширины поля вывода

1: // Листинг 16.12. Настройка ширины поля вывода

2: #include <iostream.h>

3:

4: int main()

5: {

6:    cout << "Start >";

7:    cout.width(25);

8:    cout << 123 << "< End\n";

9:

10:   cout << "Start >";

11:   cout.width(25);

12:   cout << 123 << "< Next >";

13:   cout << 456 << "< End\n";

14:

15:   cout << "Start >";

16:   cout.width(4);

17:   cout << 123456 << "< End\n";

18:

19:   return 0:

20: }

Результат:

Start >         123< End

Start >         123< Next >456< End

Start >123456< End

Анализ: Сначала (строки 6—8) число 123 выводится в поле шириной в 25 символов. Ширина поля задается в строке 7. Результат этого форматирования показан в первой строке вывода.

Во второй строке вывода значение 123 распечатывается опять же в поле шириной 25, а затем сразу же выводится значение 456. Как видите, установка ширины поля применяется только первый раз, а для второго выражения с объектом cout уже не действует. Таким образом, установки функции width() применяются только к следующему выражению вывода данных.

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

Установка символов заполнения

Обычно объект cout заполняет пробелами пустые позиции поля, заданные функцией width(), как было показано в приведенном выше примере. Однако иногда возникает необходимость заполнить пустые позиции другими символами, например звездочками (*). Для этого нужно использовать функцию fill(), в параметре которой указать символ заполнения. Использование функции fill() показано в листинге 16.13.

Листинг 16.13. Использование функции fill()

1: // Листинг 16.13. Функция fill()

2:

3: #include <iostream.h>

4:

5: int main()

6: {

7:    cout << "Start >";

8:    cout.width(25);

9:    cout << 123 << "< End\n";

10:

11:

12:   cout << "Start >";

13:   cout.width(25);

14:   cout.fill('*');

15:   cout << 123 << "< End\n";

16:   return 0;

17: }

Результат:

Start >                  123< End

Start >******************123< End

Анализ: Строки 7—9 переписаны из предыдущего листинга. То же можно сказать и о строках 12—15, однако в строке 14 этого листинга используется функция fill('*') для установки символа звездочки (*) в качестве символа заполнения, что Наглядно отражается в выводе программы.