Załóżmy, że tworzymy program do obliczania pola figur geometrycznych. Napisaliśmy już większość kodu, jednak wciąż nie możemy zaimplementować rozwiązania, które pozwalałoby na komunikację z użytkownikiem.

Strumienie

Chcąc rozwiązać ten problem, musimy poznać strumienie. Można je sobie wyobrazić jako dane płynące od źródła do celu. Istnieje wiele celów i źródeł strumieni. Może to być ekran, klawiatura, plik lub zewnętrzne urządzenie.

W języku C++ wyróżniamy trzy typy strumieni:

  • strumienie wejściowestrumień wejściastrumienie wejściowe (wczytują dane),

  • strumienie wyjściowestrumień wyjściastrumienie wyjściowe (wypisują dane),

  • strumienie uniwersalne (wczytują i wypisują dane).

Strumienie predefiniowane

Aby uniknąć sytuacji, w której za każdym razem musimy odpowiednio programować strumień, aby wyświetlał podane wartości w odpowiednim formacie, w C++ mamy możliwość użycia strumieni predefiniowanych. W tym celu dołączamy bibliotekę iostream. Jest to biblioteka standardowa dla języka programowania C++. Obsługuje operacje wejścia i wyjścia oraz ma kilka innych zastosowań. Bibliotekę dołączymy do kodu, dodając na jego początku linijkę #include <iostream>.

W języku C++ mamy do dyspozycji cztery strumienie predefiniowane. Nas najbardziej interesują dwa z nich, czyli:

  • std::cout – strumień wyjścia,

  • std::cin – strumień wejścia.

Warto jednak również wspomnieć o dwóch pozostałych:

  • std::cerr – strumień błędów,

  • std::clog – strumień błędów, szczególnie wydajny w przypadku dużej ilości danych.

Strumienie te są rzadziej używane. Często wiązane są z plikiem na dysku, do którego przesyłają dane o błędach, które wystąpiły.

Operatory <<>>

W zależności od strumienia, którego chcemy użyć, zastosujemy odpowiednio << lub >>. Jak się za chwilę przekonamy, wskazują one – podobnie jak strzałki – kierunek przepływu strumienia: jeśli chcemy pobrać dane, stosujemy >>, a w przypadku, gdy chcemy je wypisać – używamy operatora <<.

Strumień wyjścia – std::cout

Stosujemy za każdym razem, gdy chcemy coś wyświetlić, np. wynik programu obliczającego wartość wyrażenia.

Załóżmy, że chcemy, aby nasz program wyświetlił wynik obliczenia wzoru na pole trójkąta przy danych, które wcześniej zdefiniowaliśmy w programie. Kod wyglądałby następująco:

Linia 1. int podstawa znak równości 5 średnik. Linia 2. int wysokosc znak równości 10 średnik. Linia 3. double poleTrojkata znak równości podstawa asterysk wysokosc prawy ukośnik 2 średnik. Linia 5. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny poleTrojkata średnik.

Program ten wypisałby 25, czyli pole trójkąta o podstawie 5 i wysokości 10.

Strumień wejścia – std::cin

Strumień wejścia jest stosowany w przypadku, gdy chcemy wczytać dane. Możemy za jego pomocą wprowadzić dane, które mają zostać użyte we wzorze.

Załóżmy, że chcemy, aby nasz program policzył pole prostokąta, korzystając z danych wprowadzonych przez użytkownika. Kod wyglądałby następująco:

Linia 1. int bok1 średnik. Linia 2. int bok2 średnik. Linia 3. int poleProstokata średnik. Linia 5. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny bok1 średnik. Linia 6. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny bok2 średnik. Linia 8. poleProstokata znak równości bok1 asterysk bok2 średnik.

Teraz połączymy operacje wejścia i wyjścia, aby stworzyć program, który poprosi użytkownika o wprowadzenie danych, a następnie obliczy pole trapezu i wypisze wynik.

Linia 1. int podstawa1 średnik. Linia 2. int podstawa2 średnik. Linia 3. int wysokosc średnik. Linia 4. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj pierwszą podstawę trapezu dwukropek cudzysłów średnik. Linia 5. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny podstawa1 średnik. Linia 7. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj drugą podstawę trapezu dwukropek cudzysłów średnik. Linia 8. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny podstawa2 średnik. Linia 10. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj wysokość trapezu dwukropek cudzysłów średnik. Linia 11. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny wysokosc średnik. Linia 13. double poleTrapezu znak równości otwórz nawias okrągły bok1 plus bok2 zamknij nawias okrągły asterysk wysokosc prawy ukośnik 2 średnik. Linia 15. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Pole trapezu wynosi dwukropek cudzysłów średnik. Linia 16. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny poleTrapezu średnik.

W ten sposób zastosowaliśmy oba strumienie w jednym kodzie. Tekst wprowadziliśmy, poprzedzając i kończąc go cudzysłowem – jest to łańcuch znaków.

Kod ten można jednak uprościć. Zamiast wielokrotnie powtarzać instrukcje std::coutstd::cin, możemy raz jeszcze użyć odpowiednio operatora << lub >>.

Wprowadzanie danych do programu może zostać zapisane w następujący sposób:

Linia 1. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj boki oraz wysokość trapezu dwukropek cudzysłów średnik. Linia 2. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny bok1 zamknij nawias ostrokątny zamknij nawias ostrokątny bok2 zamknij nawias ostrokątny zamknij nawias ostrokątny wysokosc średnik.

Po wpisaniu instrukcji std::cin możemy w tym samym wierszu wielokrotnie użyć operatora >> do wprowadzenia kolejnych zmiennych.

Taką samą metodę można wykorzystać, używając cout.

Linia 1. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Pole trapezu wynosi dwukropek cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny poleTrapezu średnik.

Słownik

strumień wejścia
strumień wejścia

strumień używany do wprowadzania danych do programu

strumień wyjścia
strumień wyjścia

strumień używany do wyprowadzania danych z programu