Przedstawi�em Ci ju� podstawowe typy liczbowe. Jak ju� si� domy�lasz i podejrzewasz, operuj�c tylko na liczbach nie by�oby nam zbyt wygodnie komunikowa� si� z u�ytkownikiem. Tak naprawd� te dwa typy kt�re Ci teraz przedstawi�, s�u�� g��wnie do komunikacji z u�ytkownikiem, ale nie tylko.
Typ znakowy umo�liwia przechowywanie jednego znaku. Do czego taki typ mo�e nam si� przyda�? Przede wszystkim umo�liwia on potwierdzanie pewnych akcji. Nie raz pewnie uda�o Ci si� natkn�� na program, kt�ry ��da� potwierdzenia jakiej� akcji. Tutaj w�a�nie poprzez podanie odpowiedniej litery, cyfry lub innego znaku, mo�na w�a�nie zrealizowa�.
Typ znakowy w j�zyku C++ to:
char - typ znakowy (zajmuje 1 bajt)
Je�li dok�adnie czytasz, powinno zwr�ci� Twoj� uwag� stwierdzenie, �e mo�emy poda� jak znak, zar�wno liter�, cyfr� jak i inny znak. Mo�e Ci� to zastanawia�, ale przecie� czy cyfry nie mo�na traktowa� jako znaku? Opr�cz tego mo�emy wykorzystywa� w programach r�wnie� takie, znaki kt�rych nie mo�na wpisa� za pomoc� klawiatury.
Poni�ej przedstawiam przyk�adowy program, w kt�rym pobieramy znak z klawiatury, wypisujemy p�niej pobrany znak. Dodatkowy wypiszemy rozmiar typu char. Podany znak musi by� znakiem niesteruj�cym, czyli nie mo�e to by� znak typu Ctrl, Shift, Alt, F1 itd. Mo�esz wpisa� tylko jeden znak - inaczej program nie zadzia�a "poprawnie".
#include <iostream>
using namespace std;
int main()
{
char znak; // typ znakowy
cout <<"Podaj dowolny NIESTERUJACY znak z klawiatury: ";
cin >>znak;
cin.ignore();
cout <<endl<<"Znak podany przez Ciebie to: "<<znak<<"."<<endl;
cout <<"Typ char zajmuje "<<sizeof(char)<<" bajt."<<endl;
cout <<"Zmienna zajmuje "<<sizeof(znak)<<" bajt."<<endl<<endl;
cout <<"Nacisnij ENTER aby zakonczyc"<<endl;
getchar();
return 0;
}
program nr 6.1
Znaki zapisujemy w pojedynczych cudzys�owach '. Np. poni�sza instrukcja spowoduje wypisanie litery a, spacji, a nast�pnie litery b.
cout <<'a'<<' '<<'b';
Bardzo wa�ne jest, aby w takim przypadku pomi�dzy cudzys�owami znajdowa� si� tylko jeden znak. W innym przypadku kompilator zazwyczaj wypisze b��d. Mo�e si� jednak zdarzy�, �e kompilator nie zasygnalizuje b��du, program si� skompiluje a wskutek b��dnego zapisu, program nie b�dzie dzia�a� poprawnie.
Opr�cz standardowego zapisu mo�emy r�wnie� wypisywa� znaki za pomoc� sekwencji '\ooo', przy czym ci�g ooo to liczba w zapisie �semkowym. Poni�sza linijka przedstawia spos�b wypisania litery S t� metod�. Jak widzisz nie jest to zbyt wygodna i tak naprawd� zbyt przydatna metoda.
cout <<'\123';
Znacznie bardziej przydatna jest mo�liwo�� wypisywania znak�w specjalnych. Wszystkie znaki specjalne s� poprzedzone znakiem \. Jak ju� wiesz, alternatywnym sposobem przechodzenia do nowej linii podczas wy�wietlania komunikat�w jest w�a�nie znak specjalny '\n' - znak nowej linii. My w naszych programach stosujemy modyfikator endl, kt�ry pojawi� si� w j�zyku C++.
Oto pe�na lista znak�w specjalnych w j�zyku C++:
'\n' - nowa linia
'\t' - tabulacja pozioma (czyli "normalny" tabulator)
'\v' - tabulacja pionowa
'\b' - cofni�cie (skasowanie ostatniego znaku)
'\r' - powr�t karetki (przesuni�cie do pocz�tku wiersza)
'\f' - nowa strona
'\a' - sygna� d�wi�kowy
'\\' - uko�nik (backslash), czyli znak \
'\?' - znak zapytania
'\'' - pojedynczy cudzys��w
'\"' - podw�jny cudzys��w
Zapami�tanie tej listy znak�w nie jest takie trudne. Na dodatek, wi�kszo�ci z tych znak�w nie b�dziesz u�ywa� zbyt cz�sto. Tak naprawd� najcz�ciej b�dziesz u�ywa� znaku nowej linii i cudzys�ow�w.
Mimo, �e sam typ znakowy jest przydatny, to ma on jedno ograniczenie: za jednym razem mo�na pobra�/wypisa� tylko jeden znak. W przypadku gdy chcemy wypisa� kilka liter, pos�ugiwanie si� typem znakowym nie jest zbyt wygodne.
Typem napisowym w j�zyku C++ jest:
string - typ napisowy
Bardzo wa�ne jest pami�tanie o tym, �e aby korzysta� z typu napisowego, musimy do��czy� plik nag��wkowy cstring. Przy okazji warto zaznaczy�, �e w j�zyku C, czyli w poprzedniku j�zyka C++, do przechowywania napis�w stosowa�o si� zazwyczaj tablice znak�w.
Poni�ej przedstawiam przyk�adowy program, w kt�rym pobieramy napis z klawiatury, a nast�pnie wypisujemy pobrany napis. Napis musi si� sk�ada� ze znak�w niesteruj�cych, czyli nie mo�e to by� znak�w typu Ctrl, Shift, Alt, F1 itd. Dodatkowo, prosz� nie stosowa� bia�ych znak�w (tzn. spacji czy znak�w tabulacji), bowiem wtedy program nie zadzia�a "poprawnie".
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string napis; // typ napisowy
cout <<"Podaj napis (bez bialych znakow) z klawiatury: ";
cin >>napis;
cin.ignore();
cout <<endl<<"Napis podany przez Ciebie to: "<<napis<<"."<<endl<<endl;
cout <<"Nacisnij ENTER aby zakonczyc"<<endl;
getchar();
return 0;
}
program nr 6.2
Je�li przyjrzysz si� powy�szemu programowi, zauwa�ysz co� jeszcze. Zauwa�, �e wszystkie napisy, kt�re wypisujemy na ekran s� wypisywane w podw�jnych cudzys�owach ".
Dzi�ki stosowaniu napis�w, mo�emy znacznie przyspieszy� wypisywanie komunikat�w na ekran. Na przyk�ad dwa poni�sze fragmenty kodu w C++ s� sobie r�wnowa�ne:
cout <<'a'<<' '<<'b';
cout <<"a b";
Ponadto w napisach mo�emy r�wnie� stosowa� bez problemu wszystkie znaki specjalne (przedstawione przy omawianiu typu znakowego). Dzi�ki temu r�wnie� zaoszcz�dzimy pisania.
Mam nadziej�, �e Twoj� uwag� zwr�ci�o to, �e w przyk�adowym programie nie wolno Ci by�o podawa� w napisie �adnych bia�ych znak�w, np. spacji. Z kolei jak widzisz napisy wypisywane na ekran zawieraj� spacje.
Prawda jest taka, �e napisy i zmienne typu string mog� bez problemu zawiera� r�ne znaki, w tym r�wnie� spacje, tabulatory itd. Problemem jest spos�b pobierania napisu z klawiatury. Standardowo dane z klawiatury s� pobierane do pierwszego bia�ego znaku (czyli znak�w takich jak enter, spacja, znak tabulacji) i bez u�ycia dodatkowych zabieg�w nie da si� tego zmieni�.
My na razie nie b�dziemy si� tym problemem zajmowa�, bowiem pobieranie danych to znacznie bardziej z�o�one zagadnienie i na razie my�l�, �e warto skupi� si� na innych kwestiach.
Dzi�ki tej lekcji wiesz ju� jak mo�esz wypisywa� wszystkie napisy w dowolnych kombinacjach. Jest to bardzo wa�na cz��, bowiem w ten spos�b umo�liwiasz sobie komunikacj� z u�ytkownikiem.
powr�t