[lekcja 6] Obsługa strumienia wyjściowego Kurs C++ » Poziom 1

background image

Strona 1

[lekcja] Obsługa strumienia wyjściowego | Kurs C++ » Poziom 1

2011-11-12 15:28:17

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wyjsciowego/9

Darmowe kursy Online

»

Kurs C++

»

Poziom 1

Autor: Piotr Szawdyński

Obsługa strumienia wyjściowego

[lekcja]

Rozdział 6. Zapoznanie się z obsługą standardowegowyjścia za pomocą funkcji printf oraz strumienia std::cout.

W niniejszym rozdziale będziemy zajmować się wyświetlaniem danych. Co prawda była już na ten temat krótka wzmianka i temat być

może wydaje się dla Ciebie wyczerpany, jednak niestety jest tu sporo do powiedzenia. Jak już zapewne wiesz język C++ jest potomkiem

języka C. W związku z tym do istniejących komponentów C zostały dodane ich odpowiedniki w stylu C++. W celu zachowania wstecznej

zgodności, tj. z językiem C - stare komponenty zostały zachowane i również można z nich korzystać w C++. W konsekwencji mamy do

dyspozycji dwa mechanizmy do wypisywania danych na standardowe wyjście, które w naszym wypadku jest konsolą. W niniejszym

rozdziale wymienimy te dwie stosowane techniki, jednak szerzej zostanie omówiona metoda prostsza w użyciu, należąca do języka C++.

Funkcja printf

Funkcję

»

C

printf

mieliśmy okazję zobaczyć w działaniu już kilkukrotnie. W tym rozdziale poznamy ją trochę lepiej, jednak to będzie

ostatni rozdział poświęcony tej funkcji w podstawowej części kursu. Funkcja ta wywodzi się bowiem z języka C i nie jest zbyt przyjemna

w użyciu dla początkującego programisty. Przejdźmy teraz do wcześniej omawianego przykładu:

C/C++

#include <cstdio>

int

main

()

{

printf

(

"Test dzialania Code::Blocks"

)

;

return

0

;

}

Powyższy wiersz jakby się mogło wydawać na pierwszy rzut oka jest oczywisty i efekt działania powyższego programu jest łatwo

przewidywalny. Jak już pisałem w jednym ze wcześniejszych rozdziałów powyższy wiersz wyświetli komunikat:

Test dzialania Code::Blocks

Funkcja

»

C

printf

może przyjmować jednak więcej niż jeden argument, co przedstawiam w poniższym przykładzie:

C/C++

#include <cstdio>

int

main

()

{

printf

(

"Czy %d jest wieksze od %s?"

,

3

+

4

,

"siedem"

)

;

return

0

;

}

O ile pierwszy wariant wywołania był oczywisty tak tutaj już tak nie jest. Pojawiają się bowiem tajemnicze argumenty, które nie wiadomo

jak zadziałają w programie. Warto jednak najpierw wtrącić słowo co to jest argument.

Argumentem nazywamy wartość przekazywaną

do funkcji. Kolejne argumenty są rozdzielone przecinkami.

Innymi słowy funkcja

»

C

printf

przyjęła trzy argumenty. Pierwszym z nich

jest tekst "Czy %d jest wieksze od %s?", drugim działanie arytmetyczne 3+4 i trzecim znowu tekst o treści "siedem".

Pytanie jakie tu należy zasadniczo zadać to co wyświetli wyżej wspomniane wywołanie funkcji i dlaczego. Po uruchomieniu tego

programu ujrzymy następującą treść:

Czy 7 jest wieksze od siedem?

Porównując wywołanie funkcji z treścią którą otrzymaliśmy można łatwo zauważyć, że zamiast zapisu %d pokazała się nam liczba 7,

natomiast w miejscu %s ukazał się napis siedem. Pierwszy argument funkcji

»

C

printf

w rzeczywistości służy do formatowania

wyjścia, tj. sposobu prezentacji danych. Znak % jest znakiem specjalnym, po którym następuje określenie sposobu prezentacji kolejnych

argumentów funkcji

»

C

printf

. Zapis %d informuje, że argumentem będzie liczba całkowita, natomiast %s mówi funkcji, że będzie to

łańcuch znaków. Funkcja

»

C

printf

jest znacznie bardziej rozbudowana niż te dwa podstawowe typy. Nie będziemy się jednak w nią

zagłębiać ze względu na to, iż będziemy wykorzystywali inne i znacznie prostsze narzędzie do wypisywania danych.

Więcej informacji o tej funkcji możesz znaleźć w dokumentacji znajdującej się na łamach niniejszego serwisu pod hasłem

»

C

printf

.

background image

Strona 2

[lekcja] Obsługa strumienia wyjściowego | Kurs C++ » Poziom 1

2011-11-12 15:28:17

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wyjsciowego/9

Strumień wyjścia std::cout

Pomimo, iż znamy już powierzchownie jedną technikę wypisywania różnych danych na ekranie - pora poznać inną, którą znacznie

bardziej docenisz w toku nauki programowania. Jest nią użycie strumienia std::cout. Na początek przytoczę program, który już

widzieliśmy wcześniej z tą różnicą, że będzie on napisany w C++. Oto on:

C/C++

#include <iostream>

int

main

()

{

std

::

cout

<<

"Test dzialania Code::Blocks"

;

return

0

;

}

Powyższy program wypisze dokładnie to, co jest zawarte w podwójnych apostrofach. Zapis std::cout powoduje skierowanie danych na

standardowy strumień wyjściowy tak samo jak to robiła funkcja

»

C

printf

. W programie tym występują również znaki <<, które

nazywamy operatorem. Za pomocą operatora << 'wskazujemy' dane, które mają zostać przekazane do strumienia.

Pierwszy przykład jest na tyle oczywisty, że nie wymaga on dalszych wywodów , tak więc przejdźmy do kolejnego programu.

C/C++

#include <iostream>

int

main

()

{

std

::

cout

<<

"Czy "

;

std

::

cout

<<

3

+

4

;

//drugi argument w printf

std

::

cout

<<

" jest wieksze od "

;

std

::

cout

<<

"siedem"

;

//trzeci argument w printf

return

0

;

}

Powyższy kod realizuje dokładnie to samo, co wcześniej przedstawiony program, używający

»

C

printf

(nie trzeba chyba wskazywać o

który kod konkretnie chodzi). Jak widać wiersze w których występują komentarze zawierają te same dane, które były przekazane za

pomocą drugiego i trzeciego argumentu funkcji

»

C

printf

. Istotną różnicą jest jednak brak %d oraz brak %s. Fakt ten powinien mieć

dla Ciebie istotne znaczenie - mniej musisz pamiętać by otrzymać ten sam efekt. Powyższy fakt jest głównym powodem dlaczego

będziemy korzystali ze strumienia wyjściowego std::cout. Zanim zaczniesz narzekać na to, że zapis jest dużo dłuższy - miej świadomość

tego, że język C++ oferuje kilkanaście typów podstawowych, np. liczba całkowita krótka 16-bitowa, zwykła 32-bitowa i długa 64-bitowa.

Każda z wcześniej wymienionych liczb może być ze znakiem lub bez. Do tego dochodzą znaki, liczby zmiennoprzecinkowe, wartości

logiczne, wskaźniki i być może jeszcze inne podstawowe typy, które w chwili obecnej pominąłem. Dla każdego wyżej wymienionego typu

zapis w funkcji

»

C

printf

występujący po % będzie wyglądał inaczej, natomiast w przypadku użycia mechanizmu C++ kompilator 'wie'

co z danym typem zrobić. Na deser warto jeszcze przedstawić jak można zapisać ten sam kod krócej.

C/C++

#include <iostream>

int

main

()

{

std

::

cout

<<

"Czy "

<<

3

+

4

<<

" jest wieksze od "

<<

"siedem"

;

return

0

;

}

Jak widać strumień std::cout jest znacznie wygodniejszym narzędziem w rękach początkowego programisty.

Znaki specjalne

Zanim przejdziemy do następnego rozdziału dobrze będzie zapoznać się jeszcze ze znakami specjalnymi, jakie można wstawić we

wypisywanym tekście . Do najczęściej używanych znaków należą: tabulacja, przejście do nowego wiersza, backslash i podwójny apostrof.

Aby wyświetlić znaki specjalne w treści należy je poprzedzić backslashem (\ ). Poniższa tabelka przedstawia tylko te najczęściej

używane:

Opis

Język C Język C++

przejście do nowego wiersza \n

std::endl

tabulacja

\t

(brak - patrz zapis języka C)

backslash

\\

(brak - patrz zapis języka C)

Na koniec krótki przykład wykorzystujący powyższe znaki specjalne:

C/C++

#include <iostream>

#include <cstdio>

int

main

()

{

std

::

cout

<<

"\t tekst \"C:\\Hej\\ho.txt.\""

<<

std

::

endl

;

printf

(

"Uczymy sie \" pisac \t tekst C:\\Hej\\ho.txt. w stylu C\n"

)

;

background image

Strona 3

[lekcja] Obsługa strumienia wyjściowego | Kurs C++ » Poziom 1

2011-11-12 15:28:17

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wyjsciowego/9

Architektserwisu: Piotr Szawdyński

© Wszelkieprawa zastrzeżone2005-2011

printf

(

"\n\na tu konczymy zabawe"

)

;

std

::

cout

<<

std

::

endl

<<

std

::

endl

<<

"zrob sobie przerwe :)"

<<

std

::

endl

;

return

0

;

}

Po uruchomieniu zobaczymy na ekranie następującą treść:

tekst "C:\Hej\ho.txt."

Uczymy sie " pisac tekst C:\Hej\ho.txt. w stylu C

a tu konczymy zabawe

zrob sobie przerwe :)

Process returned 0 (0x0) execution time : 0.015 s

Press any key to continue.

Błędy kompilacji

Jeżeli zapomnisz dołączyć pliku nagłówkowego iostream to prawdopodobnie próba skompilowania zakończy się niepowodzeniem . W

logu kompilacji znajdziesz błąd o następującej treści :

In function 'int main()':

error: 'cout' is not a member of 'std'

Przetłumaczony błąd brzmi następująco:

W funkcji 'int main()':

ą

d: 'cout' nie nale

ż

y do 'std'

Innymi słowy: kompilator poinformował Ciebie, że nie wie co to jest cout. Rozwiązaniem tego problemu jest oczywiście dopisanie linijki,

która dołączy bibliotekę iostream w której znajduje się definicja cout. Linijka ta wygląda następująco:

#include <iostream>

.

Zadanie domowe

Napisz program, który wyświetli na ekranie:

==============

= To proste! =

==============

A jak to zrobic?

Koniec :)

Wszystkieteksty są chronioneprawami autorskimi. Kopiowanielub rozpowszechnianietreści poza niniejszymserwisem jest

zabronione.

Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechnianiawłasnego tekstu wedle własnego uznania.


Wyszukiwarka

Podobne podstrony:
[lekcja 9] Obsługa strumienia wejściowego Kurs C++ » Poziom 1
[lekcja 11] Operacje porównania Kurs C++ » Poziom 1
[lekcja 12] Operacje logiczne Kurs C++ » Poziom 1
[lekcja 7] Przestrzeń nazw std Kurs C++ » Poziom 1
[lekcja 1] Wybieramy środowisko pracy Kurs C++ » Poziom 1
[lekcja 10] Operacje matematyczne Kurs C++ » Poziom 1
[lekcja 3] Uruchamiamy pierwszy program Kurs C++ » Poziom 1
[lekcja 18] Tablice jednowymiarowe Kurs C++ » Poziom 2
[lekcja 22] Pętla for Kurs C++ » Poziom 2
[lekcja 11] Operacje porównania Kurs C++ » Poziom 1
[lekcja 20] Funkcje, a słowo kluczowe return Kurs C++ » Poziom 2
[lekcja 13] Instrukcja warunkowa if else Kurs C++ » Poziom 1
[lekcja 15] Pętla do while Kurs C++ » Poziom 2
[lekcja 17] Funkcje pierwsze starcie Kurs C++ » Poziom 2
[lekcja 16] Pseudolosowe liczby całkowite Kurs C++ » Poziom 2
[lekcja 2] Podstawy programowania teoria i terminologia Kurs C++ » Poziom 1
[lekcja 21] Losowanie bez powtórzeń Kurs C++ » Poziom 2
[lekcja 19] Przekazywanie tablic jednowymiarowych do funkcji Kurs C++ » Poziom 2
[lekcja 4] Podstawy programowania w C++ Kurs C++ » Poziom 1

więcej podobnych podstron