Sterowanie formatem
Bieżące zasady formatowania zapisane są w ośrodku dowodzenia kontrolnego strumienia - w tak zwanych flagach stanu formatowania.
Klasa w której te flagi umieszczono jest nazwana ios.
Flagi dla biblioteki <iostream>.
Zmiany własności flag:
Włączanie flag: obiekt.setf(ios::flaga);
Wyłączanie flag: obiekt.unsetf(ios::flaga);
Wywoływanie funkcji składowych z ios: obiekt.funkcja()
right, left, internal
czyli justowanie tekstu gdy liczba dwucyfrowa ma być wyświetlona na polu o szerokości 10 pól, width() -ustawienie dłogości wyświtlania
int l = - 3;
cout << l << endl;
cout.width( 10 );
cout << left << l << endl;
cout.width( 10 );
cout << right << l << endl;
cout.width( 10 );
cout << internal << l << endl;
dec(10), oct(8), hex(16)
zmiany w systemach, stosujemy tutaj ios::basefield z wygody
int l = 59;
cout.setf( ios::hex, ios::basefield );
cout << l << endl;
cout.setf( ios::oct, ios::basefield );
cout << l << endl;
cout.setf( ios::dec, ios::basefield );
cout << l << endl;
showpos
dodaje + przed liczbami
int a = 59;
cout.setf( ios::showpos );
cout << a << endl;
uppercase
w zapisie 16-stkowym powiększa litery
int l = 59;
cout.setf( ios::hex, ios::basefield );
cout.setf( ios::uppercase );
cout << l << endl;
showpoint
wypisuje nawet nieznaczące zera i kropkę dziesiętną
float x = 1175;
cout << x << endl;
cout.setf( ios::showpoint );
cout << x << endl;
scientific
notacja naukowa czyli wykładnicza
float x = 1175;
cout << x << endl;
cout.setf( ios::scientific );
cout << x << endl;
fixed
notacja zwykła (w odwrotną stronę niż w przykładzie powyżej)
width()
określa na ilu polach wypisać liczbą, przydatne przy tworzeniu tabel, kolumn itp. Ustawienie szerokości nie odbywa się raz na zawsze. Dotyczy tylko najbliższej operacji we/wy. Potem automatycznie zaczyna obowiązywać domniemanie, czyli 0.
long kwota[] = { 120, 1650000, 5200, 190000123 };
for( int i = 0; i < 4; i++ )
{
cout << "Rachunek nr ";
cout.width( 2 );
cout << i << " opiewa na sume :";
cout.width( 10 );
cout << kwota[ i ] << " DM\n";
}
Aby sprawdzić jakie parametry są ustawione trzeba postąpić następująco:
cout.width( 10 );
cout <<( cout.width() );
fill()
czyli wypełnianie. Jeśli chcemy liczbę 2 cyfrową zapisać na 7 miejscach automatycznie zostanie ona uzupełniona spacjami, dzięki fill możemy zmienić wypełnianie na * lub inny symbol.
long kwota[] = { 120, 1650000, 5200, 190000123 };
for( int i = 0; i < 4; i++ )
{
cout << "Rachunek nr ";
cout.width( 2 );
cout.fill( '*' );
cout << i << " opiewa na sume :";
cout.width( 10 );
cout.fill( '_' );
cout << kwota[ i ] << " DM\n";
}
Aby sprawdzić jakie parametry są ustawione trzeba postąpić następująco:
cout <<( cout.fill() );
W przeciwieństwie do width fill daje efekt trwały, to zaczy, że dane wypełnienie będzie obowiązywać do mamętu aż go nie zmienimy.
precision()
pozwala określić dokładność wypisywanych liczb zmiennoprzecinkowych. Domniemenie liczby są wypisywane z dokładnością do 6 miejsc po przecinku, chyba że są to nieznaczące zera.
double kwota2[] = { 1.123456789123, 2.12345, 3.1 };
cout << kwota2[ 0 ] << " DM\n";
cout.precision( 15 );
for( int i = 0; i < 3; i++ )
{
cout << "Rachunek nr ";
cout << i << " opiewa na sume :";
cout << kwota2[ i ] << " DM\n";
}
Manipulatory
Manipulatory to specjalne wartości, które można wstawić do strumienia albo z niego wyjąć, po to aby wywołać zamierzony efekt, polegający na zmianie sposobu formatowania.
Manipulatorów używamy tak, jak byśmy chcieli wypisać na ekranie obiekt, np. hex.
Manipulatory bezargumentowe
Manipulatory parametryczne
Aby móc z nich skorzystać musimy umieścić w programie dyrektywę #include <iomanip>
Zmiana koloru czcionki i tekstu
Poprawniej było by "Jak zmienić kolor tekstu w konsolce za pomocą WinAPI"(Jeśli chodzi o WinAPI).
A tera odpowiedz.
w WinAPI jest taka funkcja jak SetConsoleTextAttribute
pozwala ona na modyfikowanie kolorów w konsoli.
#include <windows.h>
#include <cstdio>
int main()
{
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY );
printf( "Zielony napis" );
system( "pause" );
return 0;
}
#include <windows.h>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
HANDLE hOut;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
cout << "Standart" << endl << endl;
SetConsoleTextAttribute( hOut, BACKGROUND_RED );
cout << "This text is red." << flush << endl << endl;
SetConsoleTextAttribute( hOut, FOREGROUND_GREEN );
cout << "This text is green." << endl << endl;
SetConsoleTextAttribute( hOut, FOREGROUND_BLUE );
cout << "This text is blue." << endl << endl;
system( "PAUSE" );
return 0;
}