left, right, inernal – wyrównanie do lewej, prawej strony

Transkrypt

left, right, inernal – wyrównanie do lewej, prawej strony
Niektóre manipulatory dla C++Builder
Manipulatory z parametrami wymagają dołączenia pliku iomanip.
W dalszej części przez W oznaczamy wyrażenie całkowite o wartości nieujemnej
endl
napisanie nowej linii i wyczyszczenie bufora. Nową linię otrzymujemy również
poprzez specjalny znak w tekscie '\n'
left, right – wyrównanie do lewej, prawej strony zarezerwowanej przez setw
szerokości pola wynikowego
showpos znak plus przed liczbami dodatnimi (domyślnie dla wartości dodatnich znak plus
jest pomijany)
noshowpos liczby dodatnie nie są poprzedzane znakiem plus
dec, oct, hex – liczby całkowite w systemach liczenia dziesiętnym, ósemkowym i
szesnastkowym
showbase, noshowbase – wartości w systemie ósemkowym i szesnastkowym z
przedrostami 0 lub 0x albo bez tych przedrostków.
setw(W)- ustalenie minimalnej szerokości pola wyników na W znaków. Stosujemy tylko do
następnego elementu wyjściowego. Domyślnie wyprowadzana wartość jest
wyrównywana do prawej strony pola. Szerokość pola wyników może w niektórych
przypadkach przekroczyć W (np. cout <<setw(3)<<12345<<”**”<<endl;)
Na przykład ciąg instrukcji
cout<<"liczba"<<setw(10)<<"podstawa"<<setw(8)<<"wynik"<<endl;
cout<<setw(5)<<"0x77"<<setw(8)<<"10"<<dec<<setw(10)<<0x77<<endl
;
cout<<setw(5)<<"077"<<setw(8)<<"10"<<dec<<setw(10)<<077<<endl;
cout<<setw(5)<<"77"<<setw(8)<<"08"<<oct<<setw(10)<<77<<endl;
cout<<setw(5)<<"77"<<setw(8)<<"16"<<hex<<setw(10)<<77<<endl;
cout<<showbase; // pokazanie podstaw i powtarzamy dwie ostatnie
cout<<setw(5)<<"77"<<setw(8)<<"08"<<oct<<setw(10)<<77<<endl;
cout<<setw(5)<<"77"<<setw(8)<<"16"<<hex<<setw(10)<<77<<endl;
powoduje wyświetlenie
liczba podstawa
0x77
10
077
10
77
08
77
16
77
08
77
16
wynik
119
63
115
4d
0115
0x4d
setfill(znak) określenie znaku uzupełniającego wynik do szerokości pola. Domyślnym
znakiem uzupełniającym jest spacja. Po ustaleniu znaku obowiązuje on aż do ustalenia
nowego znaku. Jeśli pole przeznaczone na wynik nie jest w pełni wypełnione znakami
1
Niektóre manipulatory dla C++Builder
wyniku to zostanie uzupełnione znakiem podanym jako parametr setfil.
Stosowanie tego manipulatora ma sens po zastosowaniu setw dla wyniku.
Na przykład, wyświetlenie wartości zmiennej całkowitej n na polu o szerokości 6 znaków z
zerami nieznaczącymi na początku
cout << setw(6) << setfill('0') << n << endl;
(dla n=42 otrzymamy 000042).
Warto tu zwrócić uwagę jeszcze na wyrównywanie, bo dla tego samego n ale z
wyrównaniem do lewej
cout << setw(6) << setfill('0') <<left<< n << endl;
otrzymamy 420000.
Ciąg instrukcji
cout<<setfill('x')<<setw(38)<< ""<<endl;
cout<<setw(19)<<" "<<setw(9)<<" "<<setw(10)<<""<<endl;
cout<<setw(19)<<" x "<<setw(9)<<" x "<<setw(10)<<""<<endl;
cout<<setw(19)<<" xx "<<setw(9)<<" xx "<<setw(10)<<""<<endl;
cout<<setw(19)<<" xxx "<<setw(9)<<" xxx
"<<setw(10)<<""<<endl;
cout<<setw(19)<<" "<<setw(9)<<" "<<setw(10)<<""<<endl;
cout<<setw(19)<<" "<<setw(9)<<" "<<setw(10)<<""<<endl;
cout<<setw(19)<<" "<<setw(9)<<" "<<setw(10)<<""<<endl;
cout<<setfill('x')<<setw(38)<< ""<<endl;
powoduje wyświetlenie na ekranie liczby 11 ukrytej w iksach
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx xxxxxxx xxxxxxxxxx
xxxxxxxxxxxxxxxx x xxxxxx x xxxxxxxxxx
xxxxxxxxxxxxxxx xx xxxxx xx xxxxxxxxxx
xxxxxxxxxxxxxx xxx xxxx xxx xxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxx xxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxx xxxxxxxxxx
xxxxxxxxxxxxxxxxxx xxxxxxxx xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
setprecision(W) – ustalenie ilości cyfr po kropce dziesiętnej dla kolejnych wartości
wyrażeń rzeczywistych zapisywanych do strumienia wyjściowego. Jeśli jest taka
potrzeba to wynik jest zaokrąglany do odpowiedniej ilości cyfr lub uzupełniany zerami.
Nie ma zastosowania do wyrażeń całkowitych. Domyślną precyzją jest 6.
fixed – następne wartości wyrażeń rzeczywistych będą wyprowadzane w tradycyjnej
postaci [-]xxxxxx.xxxx tzn. część całkowita kropka i część ułamkowa (dla
wartości ujemnych jeszcze jest minus).
scientific – wartości wyrażeń rzeczywistych będą wyprowadzane w postaci naukowej
tzn. mantysa (będąca liczbą rzeczywistą) litera E i cecha (liczba całkowita).
showpoint –w wyniku ma być kropka dziesiętna nawet wtedy gdy po kropce są
nieznaczące zera
noshowpoint – wynik bez kropki jeśli część ułamkowa jest zerowa
uppercase – litery występujące w zapisach liczb mają być duże (E, X)
nouppercase – litery występujące w zapisach liczb mają być małe (e, x)
2
Niektóre manipulatory dla C++Builder
Jeśli dla strumienia wyjściowego nie była określona postać wyników rzeczywistych to będą
wyprowadzane w takiej która potrzebuje mniejszej liczby znaków przy co najwyżej ustalonej
przez precyzję ilości cyfr wyniku. Np. ciąg instrukcji
double d=123.4567891;
double d1=12345678.91;
cout<<"d="<<d<<endl;
cout<<"d1="<<d1<<endl;
przy założeniu, że nie były ustalone wcześniej precyzja i postać wyświetlanych wartości
rzeczywistych powoduje wyświetlenie
d=123.457
d1=1.23457e+07
boolalpha – wstawianie do strumienia wynikowego wartości logicznych w postaci słów
false i true
noboolalpha – wstawianie do strumienia wynikowego wartości logicznych jako liczb 0
lub 1
setbase(8|10|16)- ustawienie podstawy systemu liczbowego dla wartości całkowitych
3