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
.
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"
)
;
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()':
bł
ą
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.