Strumienie cin i cout

Biblioteka STL (ang. Standard Template Library - Biblioteka Standardowych Szablonów) udostępnia dwa wygodne obiekty, cin i cout, do komunikacji z konsolą znakową. Konsola jest tekstowym trybem pracy i wywodzi się z wczesnych lat komputeryzacji, gdy programy pracowały w trybie znakowym. W trybie konsoli program nie wykonuje rysunków i nie obsługuje elementów graficznych systemu Windows. Komunikacja z użytkownikiem odbywa się za pomocą okna konsoli znakowej. Zaletą konsoli jest prostota obsługi - wysyłamy na konsolę tekst i pojawia się on w oknie, odczytujemy z konsoli ciąg znaków, które wprowadził użytkownik z klawiatury.

Obiekt (w C++ nazywany klasą) cin jest strumieniem wejścia konsoli (ang. console input). Umożliwia on odczyt danych z klawiatury. Pobieranie danych ze strumienia:

cin >> zmienna;

Obiekt cout jest strumieniem wyjścia konsoli (ang. console output). Pozwala on wypisywać teksty na ekranie konsoli. Przesyłanie danych do strumienia:

cout << wyrażenia;

Zwróć uwagę na istotną różnicę. Dane odczytane ze strumienia cin muszą trafić do zmiennej, zatem prawym argumentem operatora << musi być zmienna. W przypadku cout można przesyłać wartości wyrażeń, które przed umieszczeniem w strumieniu są obliczane. Do strumienia w takim wypadku trafia zawsze wynik obliczeń.

Poniższy program odczytuje dwie liczby, sumuje je i wypisuje wynik.

 

#include <iostream>

using namespace std;

int main()
{  
  unsigned a,b;
  cout << "Sumowanie dwoch liczb\n\n";
  cout << "a = "; cin >> a;
  cout << "b = "; cin >> b;
  cout << a << " + " << b << " = " << a + b << endl << endl;
  system("pause");
  return 0;
}

 

Oprócz danych do strumieni można przesyłać tzw. manipulatory, które ingerują w sposób działania strumienia. Takimi manipulatorami są endl. Przesłanie ich do strumienia cout powoduje przejście z wydrukiem na początek następnego wiersza. Identyczny efekt uzyskamy przesyłając tekst ze znakami \n:

Przykład:

cout << "Witaj w C++\n\n";
cout << "Witaj w C++" << endl << endl; // działa tak samo jak powyżej

 

W poniższej tablicy zebraliśmy użyteczne manipulatory dla strumienia cout (odnoszą się one do wszystkich strumieni wyjściowych).

 

Manipulator Opis
endl Przenosi wydruk na początek nowego wiersza.
setw(n) Ustawia szerokość wydruku liczby. Jeśli liczba posiada mniej cyfr niż wynosi n, to reszta pola jest wypełniana spacjami. Manipulator setw(n) działa jedynie na następną liczbę przesłaną do strumienia. Kolejne dane nie będą nim już objęte. Cyfry liczby standardowo dosuwane są do prawej krawędzi pola wydruku.
   cout << setw(6) << a << endl;
width(n) To samo co setw(n).
left Umieszcza cyfry liczby po lewej stronie pola wydruku. Stosuje się tylko po manipulatorze setw(n).

   cout << setw(6) << left << a << endl;

right Umieszcza cyfry liczby po prawej stronie pola wydruku. Manipulator jest ustawiony standardowo, zatem jego użycie ma sens tylko do anulowania manipulatora left. Stosuje się tylko po manipulatorze setw(n).
setfill(ch) Manipulator używany tylko po setw(n). Ustawia on znak, którym zostanie wypełnione puste miejsce w polu wydruku liczby - jeśli liczba posiada mniej cyfr niż wynosi szerokość pola, to puste miejsca są zwykle wypełniane spacjami. Manipulator setfill() pozwala zmienić spacje na inny znak. Poniższy przykład formatuje wydruk liczb całkowitych na 6 cyfr z wiodącymi zerami, np. zamiast 173 otrzymamy 000173:
    cout << setw(6) << setfill('0') << a << endl;
setprecision(n) Manipulator ustawia liczbę cyfr po przecinku przy wydruku liczb zmiennoprzecinkowych. Stosuje się do wszystkich liczb zmiennoprzecinkowych, które po manipulatorze trafią do strumienia wyjściowego.
fixed Manipulator powoduje, iż kolejne liczby zmiennoprzecinkowe będą wyświetlane ze stałą liczbą cyfr po przecinku. Liczbę cyfr ustala manipulator setprecision(). Jeśli nie był wcześniej zastosowany, to standardowo otrzymamy 6 cyfr po przecinku:

   cout << fixed << x << endl;

scientific Po zastosowaniu tego manipulatora liczby zmiennoprzecinkowe będą wyświetlane w postaci naukowej:

1.56E-2  odpowiada liczbie 1.56 × 10-2 = 1,56 × 0,01 = 0,0156

 

Poniższy program przelicza cale na metry wg wzoru: m = c × 0,0254. Użycie manipulatorów wymaga dołączenia pliku iomanip.

 

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{  
  double c,m;
  cout << "Przeliczanie cali na metry\n\n";
  cout << "cale = "; cin >> c;
  m = c * 0.0254;
  cout << setprecision(2) << fixed << c << "\" = " << m << " m\n\n";
  system("pause");
  return 0;
}

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe