Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/
PowrótPowrótHistoria odwiedzonych stron
Poprzednia lekcjaKurs C++Następna lekcja

Dodatek B: Obsługa strumienia cout

B.1. 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()

B.1.1. 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;

B.1.2. 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;          //3b
cout.setf(ios::oct, ios::basefield);
cout<<l<<endl;          //73
cout.setf(ios::dec, ios::basefield);
cout<<l<<endl;          //59

B.1.3. showpos

dodaje + przed liczbami

int a=59;
cout.setf(ios::showpos);
cout<<a<<endl;        //+59

B.1.4. uppercase

w zapisie 16-stkowym powiększa litery

int l=59;
cout.setf(ios::hex, ios::basefield);
cout.setf(ios::uppercase);
cout<<l<<endl;          //3B

B.1.5. showpoint

wypisuje nawet nieznaczące zera i kropkę dziesiętną

float x =1175;
cout<<x<<endl;          //1175
cout.setf(ios::showpoint);
cout<<x<<endl;          //1175.00

B.1.6. scientific

notacja naukowa czyli wykładnicza

float x =1175;
cout<<x<<endl;          //1175
cout.setf(ios::scientific);
cout<<x<<endl;          //1.175000e+003

B.1.7. fixed

notacja zwykła (w odwrotną stronę niż w przykładzie powyżej)

B.1.8. 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());          //10

B.1.9. 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.

B.1.10. 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";       //bez formatowania polazuje tylko 6 miejsc
cout.precision(15);
for(int i=0;i<3;i++)
{
  cout<<"Rachunek nr ";
  cout<<i<<" opiewa na sume :";
  cout<<kwota2[i]<<" DM\n";
}

B.2. 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.

B.2.1. Manipulatory bezargumentowe

  • hex, dec, oct
int i=31;
cout<<i<<endl;      //31
cout.setf(ios::hex, ios::basefield);
cout<<i<<endl;      //1F
cout<<hex<<i<<endl; //1F - drugi sposób (16)
cout<<oct<<i<<endl; //37 - drugi sposób (8)
cout.setf(ios::dec, ios::basefield);
  • endl -wszyscy wiedzą jak działa (n)
  • ends -powoduje wstawienie do strumienia znaku NULL. Przydaje się, gdy wypisujemy coś nie na ekran, tylko do tablicy znaków.

B.2.2. Manipulatory parametryczne

Aby móc z nich skorzystać musimy umieścić w programie dyrektywę #include <iomanip.h>

  • setw(int) -robi to samo co width.
int m =437;
cout<<setw(3)<<m<<setw(6)<<m<<setw(11)<<m<<endl;
  • setfill(int) -robi to samo co fill
int m =437;
cout<<setw(3)<<m<<setw(6)<<setfill('b')<<m<<setw(11)<<setfill('^')<<m<<endl;
  • setprecision(int) -to samo co precision
double m =1.123456789;
cout<<setprecision(2)<<m
<<"  "<<setprecision(5)<<m
<<"  "<<setprecision(12)<<m<<endl;
  • setiosflag(long) i resetiosflag(long) -zmieniają wielkość liter w systemie 16-stkowym
int i = 224;
cout<<hex<<i <<", "
<<setiosflags(ios::uppercase)<<i<<", "
<<resetiosflags(ios::uppercase)<<i<<endl;

B.3. 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 <stdio.h>
#include <windows.h>

int main()
{
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  printf("Zielony napis");

  system("pause");
  return 0;
}
#include <windows.h>
#include <iostream>
#include <stdlib.h>

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;
}


Poprzednia lekcjaKurs C++Następna lekcja

Wszelkie prawa zastrzeżone. Autor: world007
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.


PowrótPowrótHistoria odwiedzonych stron
Panel Logowania
Login:
Hasło:

Użytkowników
Obecnie aktywnych:26
Zalogowanych:0
Zarejestrowanych:4367
Ostatnie 24h:736
Non-cookie 24h:2138
Wszystkich:214808
Ostatnia Aktualizacja
2010-09-01 19:27:34 (6 dni temu)
Ostatnio aktywni
fish134 godz
wiewiorka10 godz
Koni10 godz
BuZuz10 godz
Prezmen13 godz
trupank13 godz
szczgl15 godz
filipesq15 godz
KRIIS55117 godz
kuba181717 godz
extra218 godz
pixelmaster19 godz

Wynajem Sopot - wakacje
Pokój 2 osobowy 130zł/doba;
Lokalizacja: Sopot


O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinki
Kurs HTML - strona WWW za darmoRestauracja "ATOL" - SopotValid HTML 4.01 TransitionalValid CSS!HTML CSS JavaScript FLASH PHP MySQL