Форматиране на изхода в C++

Форматиране на изхода в C++ означава да се промени начина, по който потоците в C++ изкарват текст на екрана или във файл. За да го направите, трябва да използвате член-функцията на ostream setf. Тя е дефинирана по следния начин:

long setf(long flags);

Параметърът flags показва кои флагове искате да зададете (може да са няколко, комбинирани с битово ИЛИ). Таблица за различните флагове има малко по-долу. Функцията връща предишното състояние на флаговете.

Ако искате да премахнете зададен флаг, може да използвате другата член-функция unsetf:

long unsetf(long flags);

Отново параметъра flags показва кои флагове искате да премахнете, а функцията връща предишното състояние на флаговете.

Следва таблицата за възможните флагове:

Бит Име Обяснение
1 left подравнява вляво на полето
2 right подравнява вдясно на полето
3 internal слага знака (+/-) в началото на полето, а самото число в края му
4 dec преобразува изкарваните числа в десетична бройна система
5 oct преобразува изкарваните числа в осмична бройна система
6 hex преобразува изкарваните числа в шестнайсетична бройна система
7 showbase показва бройната система (0 пред осмични и 0x пред шестнадесетични числа)
8 showpoint винаги показва десетична точка
9 uppercase шестнадесетичните букви (a,b,c,d,e,f) се изписват главни
10 showpos винаги показва знака на числото (дори да е +)
11 scientific представя числата в „научен“ формат (с експонента)
12 fixed представя числата с фиксирана десетична точка
13 initbuf при всяко изкарване на текст се flush-ват буферите
? showalpha bool-числата се показват като true и false вместо 1 и 0

Забележка: преди всеки флаг трябва да поставите „ios::

Например: setf(ios::showpoint|ios::fixed);


Има и други начини за форматиране, които не са флагове, и се задават по следния начин:

<ostream object> << <modificator>;

Следва таблица за възможните модификатори:

Име Обяснение
dec десетично преобразуване
hex шестнайсетично преобразуване
oct осмично преобразуване
endl изкарва нов ред и flush-ва изхода
ends изкарва символа край на низ '\0'
flush изпразва буфера на потока
setbase(int) променя базата на числото
resetiosflags(long) нулира ios флагове
setiosflags(long) задава ios флагове
setfill(int) задава символ за запълване на празното място в полето
setprecision(int) задава прецизност за дробните числа
setw(int) задава минималната дължина на полето