ïîòîêîâûõ êëaññaõ ôîðìaòèðîâaíèå âûïîëíяåòñя òðåìя ñïîñîáaìè — ñ ïîìî- ùüþ ôëaãîâ, ìaíèïóëяòîðîâ è ôîðìaòèðóþùèõ ìåòîäîâ.
Флаги и форматирующие методы
Ôëaãè ïðåäñòaâëяþò ñîáîé îòäåëüíûå áèòû, îáúåäèíåííûå â ïîëå x_flags òèïa
lOng êëañña iOs. Ôëaãè ïåðå÷èñëåíû â òaáë. 10.1.
Таблица 10.1. Флаги форматирования
Флаг
|
Положение
|
Умолчание
|
Описание действия при установленном бите
|
skipws
|
0x0001
|
+
|
Ïðè èçâëå÷åíèè ïðîáåëüíûå ñèìâîëû èãíîðèðóþòñя
|
left
|
0x0002
|
|
Âûðaâíèâaíèå ïî ëåâîìó êðaþ ïîëя
|
right
|
0x0004
|
+
|
Âûðaâíèâaíèå ïî ïðaâîìó êðaþ ïîëя
|
internal
|
0x0008
|
|
Çíaê ÷èñëa âûâîäèòñя ïî ëåâîìó êðaþ,
÷èñëî — ïî ïðaâîìó. Ïðîìåæóòîê çaïîëíяåòñя ñèìâîëaìè x_fill (ñì. íèæå), ïî óìîë÷aíèþ ïðîáåëaìè
|
deC
|
0x0010
|
+
|
Äåñяòè÷íaя ñèñòåìa ñ÷èñëåíèя
|
OCt
|
0x0020
|
|
Âîñüìåðè÷íaя ñèñòåìa ñ÷èñëåíèя
|
hex
|
0x0040
|
|
Øåñòíaäöaòåðè÷íaя ñèñòåìa ñ÷èñëåíèя
|
shOwbase
|
0x0080
|
|
Âûâîäèòñя îñíîâaíèå ñèñòåìû ñ÷èñëåíèя (0x äëя øåñòíaäöaòåðè÷íûõ ÷èñåë è 0 äëя âîñüìåðè÷íûõ)
|
shOwpOint
|
0x0100
|
|
Ïðè âûâîäå âåùåñòâåííûõ ÷èñåë ïå÷aòaòü äåñяòè÷íóþ òî÷êó è äðîáíóþ ÷añòü
|
upperCase
|
0x0200
|
|
Ïðè âûâîäå èñïîëüçîâaòü ñèìâîëû âåðõíåãî ðåãèñòða
|
shOwpOs
|
0x0400
|
|
Ïå÷aòaòü çíaê ïðè âûâîäå ïîëîæèòåëüíûõ
÷èñåë
|
sCientifiC
|
0x0800
|
|
Ïå÷aòaòü âåùåñòâåííûå ÷èñëa â ôîðìå ìaíòèññû ñ ïîðяäêîì
|
fixed
|
0x1000
|
|
Ïå÷aòaòü âåùåñòâåííûå ÷èñëa â ôîðìå ñ ôèêñèðîâaííîé òî÷êîé (òî÷íîñòü
îïðåäåëяåòñя ïîëåì x_preCisiOn, ñì. íèæå)
|
unitbuf
|
0x2000
|
|
Âûãðóæaòü áóôåðû âñåõ ïîòîêîâ ïîñëå êaæäîãî âûâîäa
|
stdiO
|
0x4000
|
|
Âûãðóæaòü áóôåðû ïîòîêîâ stdout è stderr ïîñëå êaæäîãî âûâîäa
|
ПРИМЕЧАНИЕ
Ôëaãè (left, right è internal), (deC, OCt è hex), a òaêæå (sCientifiC è fixed) âçaèìíî èñêëþ÷a- þò äðóã äðóãa, òî åñòü â êaæäûé ìîìåíò ìîæåò áûòü óñòaíîâëåí òîëüêî îäèí ôëaã èç êaæ- äîé ãðóïïû.
Äëя óïðaâëåíèя ôëaãaìè â êëaññå iOs åñòü ìåòîäû flags, setf è unsetf: lOng iOs::flags(lOng); — âîçâðaùaåò òåêóùèå ôëaãè ïîòîêa;
lOng iOs::flags(lOng); — ïðèñâaèâaåò ôëaãaì çía÷åíèå ïaðaìåòða;
lOng iOs::setf(lOng, lOng); — ïðèñâaèâaåò ôëaãaì, áèòû êîòîðûõ óñòaíîâëåíû
â ïåðâîì ïaðaìåòðå, çía÷åíèå ñîîòâåòñòâóþùèõ áèòîâ âòîðîãî ïaðaìåòða;
lOng iOs::setf(lOng); — óñòaíaâëèâaåò ôëaãè, áèòû êîòîðûõ óñòaíîâëåíû
â ïaðaìåòðå;
lOng iOs::unsetf(lOng); — ñáðañûâaåò ôëaãè, áèòû êîòîðûõ óñòaíîâëåíû â
ïaðaìåòðå.
Âñå ôóíêöèè âîçâðaùaþò ïðåæíèå ôëaãè ïîòîêa.
Êðîìå ôëaãîâ, äëя ôîðìaòèðîâaíèя èñïîëüçóþòñя ñëåäóþùèå ïîëя êëañña iOs: int x_width — ìèíèìaëüíaя øèðèía ïîëя âûâîäa;
int x_preCisiOn — êîëè÷åñòâî öèôð â äðîáíîé ÷añòè ïðè âûâîäå âåùåñòâåííûõ
÷èñåë;
int x_fill — ñèìâîë çaïîëíåíèя ïîëя âûâîäa.
Äëя óïðaâëåíèя ýòèìè ïîëяìè èñïîëüçóþòñя ìåòîäû width, preCisiOn è fill: int iOs::width() — âîçâðaùaåò çía÷åíèå øèðèíû ïîëя âûâîäa;
int iOs::width(int) — óñòaíaâëèâaåò øèðèíó ïîëя âûâîäa â ñîîòâåòñòâèè ñî
çía÷åíèåì ïaðaìåòða;
int iOs::preCisiOn() — âîçâðaùaåò çía÷åíèå òî÷íîñòè ïðåäñòaâëåíèя ïðè âû- âîäå âåùåñòâåííûõ ÷èñåë;
int iOs::preCisiOn(int) — óñòaíaâëèâaåò çía÷åíèå òî÷íîñòè ïðåäñòaâëåíèя ïðè
âûâîäå âåùåñòâåííûõ ÷èñåë, âîçâðaùaåò ñòaðîå çía-
÷åíèå òî÷íîñòè;
Char fill() — âîçâðaùaåò òåêóùèé ñèìâîë çaïîëíåíèя;
Char fill(Char) — óñòaíaâëèâaåò çía÷åíèå òåêóùåãî ñèìâîëa çaïîëíå-
íèя, âîçâðaùaåò ñòaðîå çía÷åíèå ñèìâîëa.
Ïåðåä óñòaíîâêîé íåêîòîðûõ ôëaãîâ òðåáóåòñя ñáðîñèòü ôëaãè, êîòîðûå íå ìî- ãóò áûòü óñòaíîâëåíû îäíîâðåìåííî ñ íèìè. Äëя ýòîãî óäîáíî èñïîëüçîâaòü âòî- ðûì ïaðaìåòðîì ìåòîäa setf ïåðå÷èñëåííûå íèæå ñòaòè÷åñnèå nîíñòaíòû êëañ- ña iOs:
adjustfield (left | right | internal) basefield (deC | OCt | hex) flOatfield (sCientifiC | fixed)
Ïðèìåð ôîðìaòèðîâaíèя ïðè âûâîäå ñ ïîìîùüþ ôëaãîâ è ìåòîäîâ:
inClude int main(){
lOng a = 1000, b = 077;
COut.width(7);
COut.setf(iOs::hex | iOs::shOwbase | iOs::upperCase); COut << a;
COut.width(7);
COut << b << endl;
dOuble d = 0.12, C = 1.3e-4; COut.setf(iOs::left);
COut << d << endl;
COut << C;
return 0;
}
 ðåçóëüòaòå ðaáîòû ïðîãðaììû â ïåðâîé ñòðîêå áóäóò ïðîïèñíûìè áóêâaìè âû- âåäåíû ïåðåìåííûå a è b â øåñòíaäöaòåðè÷íîì ïðåäñòaâëåíèè, ïîä êaæäóþ èç íèõ îòâîäèòñя ïî 7 ïîçèöèé (ôóíêöèя width äåéñòâóåò òîëüêî ía îäíî âûâîäèìîå çía÷åíèå, ïîýòîìó åå âûçîâ òðåáóåòñя ïîâòîðèòü äâaæäû). Çía÷åíèя ïåðåìåííûõ C è d ïðèæaòû ê ëåâîìó êðaþ ïîëя:
0X3E8 0X3F
0.12
0.00013
Do'stlaringiz bilan baham: |