Форматирование вывода: setw и setprecision

Интерактивный playground: настраивайте манипуляторы и сразу видьте результат в консольном виде. Рядом — тот же вывод, что сгенерировал бы C++.

iomanip setw / setprecision Системы счисления

Значение и общие флаги

Выравнивание
Система счисления

Результат в консоли

Измените любой параметр — вывод обновится.

setw(12) setprecision(4) setfill('*') right dec

Эквивалентный код на C++

main.cpp
Манипулятор setw действует только на один следующий вывод — если нужно выровнять несколько строк, вызывайте его перед каждой. Остальные манипуляторы (setprecision, setfill, fixed и др.) сохраняют своё действие до изменения.

Справочник по манипуляторам

МанипуляторДействиеСбрасывается
setw(n)Ширина поля выводаПосле одного вывода
setprecision(n)Число значащих цифр или цифр после точки (при fixed)Только новым вызовом
setfill(c)Символ-заполнительТолько новым вызовом
left / rightВыравниваниеТолько новым вызовом
fixed / scientificФормат вещественного числаТолько новым вызовом
hex / oct / decСистема счисленияТолько новым вызовом
showposПоказывать «+» у положительныхТолько noshowpos
showbaseПрефикс системы счисления (0x, 0)Только noshowbase
uppercaseЗаглавные буквы в hexТолько nouppercase
boolalphatrue/false вместо 1/0Только noboolalpha

Форматирование через printf

Спецификации printf
printf("%-10s|%5d|%8.2f\n", "abc", 42, 3.14159);

// Результат (левый край для строки, целое, вещественное с 2 знаками):
// abc       |   42|    3.14
Различие подходов. printf задаёт формат в одном месте — и не запоминает его между вызовами. Манипуляторы iostream действуют до тех пор, пока не сброшены — это удобно при однотипном выводе таблиц, но легко забыть вернуть «нормальный» формат перед следующим выводом.

Задание

  1. Сделайте таблицу из 5 строк с шириной поля 15, выравниванием по левому краю и заполнителем «.».
  2. Настройте вывод вещественного числа так, чтобы всегда показывалось ровно 3 знака после точки.
  3. Выведите число 255 одновременно в десятичной, восьмеричной и шестнадцатеричной системах. Используйте showbase и uppercase.
  4. Объясните, почему setw нужно вызывать перед каждым выводом, а setfill — нет.
  5. Сравните вывод одного и того же числа через cout и printf. Какой подход удобнее в вашей задаче?