Читаем C++. Сборник рецептов полностью

 citystate = "Tucson, AZ";

 cout << left             // Каждое поле выравнивается влево.

  << setw(width) << first // Затем для каждого поля

  << setw(width) << last  // устанавливается его ширина и

                          // записываются некоторые данные

  << setw(width) << citystate << endl;

 cout.flags(flags);

}

Вывод выглядит следующим образом.

Richard            Stevens            Tucson, AZ

Обсуждение

Манипулятор — это функция, которая выполняет некоторую операцию над потоком. Применяемые к потоку манипуляторы задаются в операторе operator<<. Формат потока (ввода и вывода) задается набором флагов и установочных параметров конечного базового класса потока, ios_base. Манипуляторы обеспечивают удобный способ настройки этих флагов и установочных параметров без явного использования для этой цели функций setf или flags, которые громоздки и воспринимаются с трудом. Для форматирования потока вывода лучше всего использовать манипуляторы.

В примере 10.1 используется два манипулятора для вывода текста в две колонки. Манипулятор setw задает размер поля, a left обеспечивает выравнивание влево находящегося в поле значения (дополнением манипулятора left, что неудивительно, является right). Когда вы используете слово «поле», вы просто говорите, что хотите дополнить заполнителем выдаваемое в поле значение с одной или с другой стороны, чтобы только ваше значение выводилось в этом поле. Если, как в примере 10.1, вы выравниваете значение влево и затем задаете размер поля, следующее записываемое в поток значение будет начинаться с первой позиции этого поля. Если переданные в поток данные имеют недостаточный размер и не могут заполнить все пространство поля, то правая часть поля будет дополнена символом заполнителя потока, которым по умолчанию является одиночный пробел. Вы можете изменить символ заполнителя с помощью манипулятора setfill.

myostr << setfill('.') << "foo";

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

Табл. 10.1 содержит краткое описание манипуляторов, работающих с любыми типами значений (текстом, числами с плавающей точкой, целыми числами и т.д.). Имеется ряд манипуляторов, которые применяются только при выводе чисел с плавающей точкой — они описываются в рецепте 10.2.

Табл. 10.1. Текстовые манипуляторы

МанипуляторОписаниеПример вывода
left rightВыровнять значения в текущем поле вправо или влево, заполняя незанятое пространство символом-заполнителемВыравнивание влево apple      banana     cherry     Выравнивание вправо (ширина поля 10)      apple     banana     cherry
setw(int n)Установить размер поля на n символовСм. предыдущий пример
setfill(int с)Использовать символ с для заполнения незанятого пространства поляcout << setfill('.') << setw(10) << right << "foo" Выдает: .......foo
boolalpha noboolalphaОтобразить булевы значения в текущем локализованном представлении слов true и false, а не 1 и 0cout << boolalpha << true Выдает: true
endlЗаписать в поток символ новой строки (newline) и очистить буфер выводаНет
endsЗаписать в поток null-символ ('\0')Нет
flushОчистить буфер выводаНет

Некоторые представленные в табл. 10.1 (и в табл. 10.2 в следующем рецепте) манипуляторы переключают бинарные флаги потоков и в действительности реализуются как два манипулятора, которые включают и отключают флаг. Например, возьмем манипулятор boolalpha. Если вы хотите, чтобы булевы значения отображались в соответствии с текущей локализацией (например, «true» и «false»), используйте манипулятор boolalpha. Для отключения этого режима, чтобы вместо слов печатались 0 и 1, используйте манипулятор noboolalpha (он используется по умолчанию).

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных