Strona główna » Kursy » Kurs C++ » Znaki specjalne
 

Znaki specjalne

Wstęp

Konsola to prosty program, który pozwala na interakcję z użytkownikiem. Do wypisywania danych używamy funkcji cout. Odpowiada ona za wyprowadzenie danych na konsolę. Jednak wypisywanie danych używając jako odstęp spacji, albo przecinka może być niewygodne w przypadku bardziej złożonych danych. Sposób wypisywania danych możemy kontrolować przy pomocy znaków specjalnych.

Znaki specjalne

Składnia języka C++ ogranicza swobodę używania niektórych znaków. Przykładowo weźmy znak podwójnego cudzysłowu ". Jest to znak, którego używamy do oznaczania danych, które chcemy wypisać na ekran. Problem rozwiązuje tutaj znak backslash "/". Jest to znak specjalny, który jest używany do modyfikacji znaku, który po nim występuje. W ten sposób jeśli chcemy wypisać znak " należy wpisać:

  1.   cout << "\"";

W ten sam sposób wypisujemy również znaki ? oraz '. Jednak co jeśli chcemy wypisać backslash'a? Wtedy wpisujemy ten znak podwójne \. Zapis ten bardzo łatwo wyjaśnić: Znak backslash modyfikuje następny znak, który jest identyczny. Kompilator rozpoznaje, że chcemy wypisać \ i tak zapisuje w kodzie wynikowym.

Kolejnym przydatnym znakiem specjalnym jest znak końca linii \n. Jest to znak, który powoduje przejście do kolejnego wiersza. Jest to przydatne kiedy chcemy wypisać elementów. Przypuśćmy, że chcemy, aby program wypisał na ekran cyfry od 1 do 5 i każda liczba ma być w oddzielnej linijce:

  1.   cout << "1\n2\n3\n4\n5\n";

Istnieje również stała endl (ang. endline), która wypisany na strumień również przenosi kolejne znaki do nowej linijki. Takie rozwiązanie jest eleganckie, ale też mało wygodne, ponieważ musimy wypisać jako oddzielny znak. endl nie możemy umieścić w łańcuchu znaków co zobrazuje następujący przykład:

  1.   cout << "endl" << endl << "endl2";

Wtedy na ekran zostanie wypisane:

  1. endl
  2. endl2

W kodzie użyliśmy trzy razy operatora <<. Jest to jego prawidłowe użycie, ponieważ mamy strumień (cout) do którego wprowadzamy (<<) łańcuch tekstu (endl). Dalej kontynuujemy wprowadzanie (<<) znaku nowej linii (endl). Na koniec ponownie wprowadzamy (<<) tekst (endl2).

Znak specjalny \r, choć rzadko znajduje zastosowanie, warto znać. Jego działanie polega na cofnięciu kursora, miejsca gdzie ma być aktualnie zapisana, na początek linijki. Należy jednak pamiętać, że dane w tej linijce nie są kasowane. Kolejne dane będą wypisywane na dotychczas wypisanych. Przykładowo:

  1.   cout << ":( :)\r:)";

Przeanalizujmy działanie kodu. Na początek wypisujemy dwa znaki : i (. W tym momencie kursor jest ustawiony w pierwszej linijce na trzeciej pozycji. Wypisujemy kolejne trzy znaki " :)". Znak \r powoduje powrót do pierwszej pozycji w tej samej linijce, dlatego kolejne dwa znaki nadpisują dwa pierwsze. W ten sposób na koniec wszyscy są uśmiechnięci.

Tabelki

Załóżmy, że chcemy wypisać ile mamy każdego rodzaju długopisów. Nasze dane wypiszemy w dwóch kolumnach: pierwsza to będzie kolor długopisu, a w drugiej wypiszemy ile takich długopisów posiadamy. Kolejne rekordy zapiszemy jeden pod drugim. Można to wykonać tak:

  1.   cout << "Kolor Sztuk\nczarny 2\nzielony 3";
  1. Kolor Sztuk
  2. czarny 2
  3. zielony 3

Jednak takie wypisanie danych jest mało czytelne. Jeśli byśmy dodali jakieś dodatkowe kolumny to mnóstwo czasu zajęłoby nam znalezienie gdzie zaczyna i kończy się która kolumna. Istnieje jednak znak specjalny \t, który pozwala na wyrównanie danych w kolumnach. Dopiszmy go pomiędzy wartości z kolejnych kolumn:

  1.   cout << "Kolor\tSztuk\nczarny\t2\nniebieski\t3";
  1. Kolor   Sztuk
  2. czarny  2
  3. zielony 3

Tabulator \t patrzy na której pozycji znajduje się znak. Następnie wyciąga resztę z dzielenia numeru pozycji przez 8. Następnie wynik odejmuje od ośmiu i tyle znaków spacji dopisuje do linijki. Tłumacząc po polsku: jeśli wypisaliśmy w linijce 13 znaków to znak \t dopisze dokładnie 3 spacje. Wypisywanie w ten sposób tabelek nie jest idealne, ale z pewnością wystarczająco do większość projektów. Problemy z nim obrazuje zastąpienie koloru zielonego niebieskim:

  1. czarny  2
  2. niebieski      3

Podsumowanie

Lekcja 2 dobiegła końca. Zajrzyj do kodu źródłowego, aby przeanalizować wypisywanie danych jeszcze raz. Następnie spróbuj wykonać zadania, aby utrwalić materiał.

Zadania

Zadanie 1

W celu utrwalenia wiadomości spróbuj wypisać na ekran następujące dane:

  1. > Znaki specjalne <
  2. Znak    Kod
  3. newline \n
  4. tab     \t