Wybór wielokrotny w języku C++

Trójargumentowe wyrażenie wyboru

Używane jest w sytuacjach, gdy wystarczy zwrócić prostą informację zależną od jednego warunku. W takim przypadku rozbudowywanie kodu jest niecelowe.

Linia 1. warunek podkreślnik logiczny znak zapytania wartość podkreślnik gdy podkreślnik prawda dwukropek wartość podkreślnik gdy podkreślnik fałsz średnik. Linia 2. wartość podkreślnik gdy podkreślnik prawda if warunek podkreślnik logiczny else wartość podkreślnik gdy podkreślnik fałsz średnik.

Instrukcja taka odpowiada poleceniom:

Linia 1. if warunek podkreślnik logiczny dwukropek. Linia 2. wartość podkreślnik gdy podkreślnik prawda. Linia 3. else dwukropek. Linia 4. wartość podkreślnik gdy podkreślnik fałsz.

Porównajmy kody dwóch funkcji. Funkcje przyjmują dwa argumenty. Każda z nich ma sprawdzić czy pierwsza liczba przekazana jako argument jest podzielna przez drugą.

Pierwsza funkcja wykorzystuje zwykłą konstrukcję if / else:

Linia 1. bool czy podkreślnik podzielna podkreślnik przez otwórz nawias okrągły int liczba przecinek int dzielnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły liczba procent dzielnik znak równości znak równości 0 zamknij nawias okrągły. Linia 3. return true średnik. Linia 4. else. Linia 5. return false średnik. Linia 6. zamknij nawias klamrowy.

Druga funkcja wykorzystuje wyrażenie trójargumentowe:

Linia 1. bool czy podkreślnik podzielna podkreślnik przez otwórz nawias okrągły int liczba przecinek int dzielnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return liczba procent dzielnik znak równości znak równości 0 znak zapytania true dwukropek false średnik. Linia 3. zamknij nawias klamrowy.

Obie powyższe funkcje mogą być zapisane również następująco:

Linia 1. bool czy podkreślnik podzielna podkreślnik przez otwórz nawias okrągły int liczba przecinek int dzielnik zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return liczba procent dzielnik znak równości znak równości 0. Linia 3. zamknij nawias klamrowy.

Innym przykładem zastosowania wyrażenia trójargumentowego jest podanie jednego z dwóch komunikatów, zależnych od spełnienia pewnego warunku.

Linia 1. int wartosc znak równości 15 średnik. Linia 2. cout otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły wartosc zamknij nawias ostrokątny 20 znak zapytania cudzysłów Dużo cudzysłów dwukropek cudzysłów Mało cudzysłów zamknij nawias okrągły średnik. Linia 3. prawy ukośnik prawy ukośnik Mało. Linia 5. wartosc znak równości 23 średnik. Linia 6. cout otwórz nawias ostrokątny otwórz nawias ostrokątny otwórz nawias okrągły wartosc zamknij nawias ostrokątny 20 znak zapytania cudzysłów Dużo cudzysłów dwukropek cudzysłów Mało cudzysłów zamknij nawias okrągły średnik. Linia 7. prawy ukośnik prawy ukośnik Dużo.

Instrukcja switch w języku C++

Instrukcja wielokrotnego wyboru w języku C++ rozpoczyna się od słowa kluczowego switch:

Linia 1. int numer podkreślnik zawodnika znak równości 2 średnik. Linia 3. switch otwórz nawias okrągły numer podkreślnik zawodnika zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. case 0 dwukropek. Linia 5. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku 0 kropka. Linia 6. break średnik. Linia 7. case 1 dwukropek. Linia 8. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku 1 kropka. Linia 9. break średnik. Linia 10. case 2 dwukropek. Linia 11. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku 2 kropka. Linia 12. break średnik. Linia 13. case 3 dwukropek. Linia 14. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku 3 kropka. Linia 15. break średnik. Linia 16. case 4 dwukropek. Linia 17. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku 4 kropka. Linia 18. break średnik. Linia 19. zamknij nawias klamrowy.

Przedstawiliśmy sposób użycia instrukcji switch ze zmienną typu całkowitego. Nie ma jednak przeszkód, aby wykorzystać zmienne typu znakowego (char):

Linia 1. char litera znak równości apostrof c apostrof średnik. Linia 3. switch otwórz nawias okrągły litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. case apostrof a apostrof dwukropek. Linia 5. prawy ukośnik prawy ukośnik wartość zmiennej litera to apostrof a apostrof. Linia 6. break średnik. Linia 7. case apostrof b apostrof dwukropek. Linia 8. prawy ukośnik prawy ukośnik wartość zmiennej litera to apostrof b apostrof. Linia 9. break średnik. Linia 10. case apostrof c apostrof dwukropek. Linia 11. prawy ukośnik prawy ukośnik wartość zmiennej litera to apostrof c apostrof. Linia 12. break średnik. Linia 13. case apostrof d apostrof dwukropek. Linia 14. prawy ukośnik prawy ukośnik wartość zmiennej litera to apostrof d apostrof. Linia 15. break średnik. Linia 16. case apostrof e apostrof dwukropek. Linia 17. prawy ukośnik prawy ukośnik wartość zmiennej litera to apostrof d apostrof. Linia 18. break średnik. Linia 19. zamknij nawias klamrowy.
Ważne!

Definiując zmienne znakowe użyliśmy znaków apostrofu ('), a nie cudzysłowów. W języku C++ stosujemy apostrofy, kiedy chcemy przypisać zmiennej typu char konkretny znak. Użycie cudzysłowu oznacza, że chodzi o ciąg znaków. Jest on zawsze zakończony tzw. znakiem pustym, mającym w kodzie ASCII wartość 0.

Zmienna typu char może przechowywać tylko pojedyncze znaki. Zastosowanie cudzysłowów spowodowałoby dodanie znaku pustego.

Polecenie break

Przedstawiając składnię komendy switch użyliśmy instrukcji breakbreakbreak. Kończy ona zestaw poleceń towarzyszących konkretnemu przypadkowi (case). Gdy program napotka komendę break, przerywane jest wykonywanie całej instrukcji wyboru wielokrotnego.

Przyjrzyjmy się ostatniemu przykładowi. Gdy zacznie być przetwarzana linia 10, program sprawdzi, czy wartość zmiennej litera jest równa przypadkowi case 'c'. Ponieważ okaże się, że tak właśnie jest, rozpocznie się wykonywanie fragmentu kodu zapisanego w linii numer 11. Później pojawia się komenda break. Oznacza to zakończenie instrukcji switch i przejście za linię numer 19.

Łączenie warunków

Wiadomo już, dlaczego stosujemy instrukcję break. Pomyśl, jak zachowa się poniższy program:

Linia 1. char litera znak równości apostrof B apostrof średnik. Linia 3. switch otwórz nawias okrągły litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. case apostrof a apostrof dwukropek. Linia 5. case apostrof A apostrof dwukropek. Linia 6. prawy ukośnik prawy ukośnik wartość zmiennej apostrof litera apostrof to apostrof a apostrof lub apostrof A apostrof. Linia 7. break średnik. Linia 8. case apostrof b apostrof dwukropek. Linia 9. case apostrof B apostrof dwukropek. Linia 10. prawy ukośnik prawy ukośnik wartość zmiennej apostrof litera apostrof to apostrof b apostrof lub apostrof B apostrof. Linia 11. break średnik. Linia 12. zamknij nawias klamrowy.
Linia 1. char litera znak równości wielka apostrof B apostrof średnik. Linia 3. switch otwórz nawias okrągły litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. case małe apostrof a apostrof dwukropek. Linia 5. case wielkie apostrof A apostrof dwukropek. Linia 6. prawy ukośnik prawy ukośnik wartość zmiennej apostrof litera apostrof to małe apostrof a apostrof lub wielkie apostrof A apostrof. Linia 7. break średnik. Linia 8. case małe apostrof b apostrof dwukropek. Linia 9. case wielkie apostrof B apostrof dwukropek. Linia 10. prawy ukośnik prawy ukośnik wartość zmiennej apostrof litera apostrof to małe apostrof b apostrof lub wielkie apostrof B apostrof. Linia 11. break średnik. Linia 12. zamknij nawias klamrowy.

Użycie dwóch słów kluczowych case spowoduje, że możemy dokonać wyboru na podstawie większej liczby wyrażeń. Warto pamiętać, że po wykonaniu instrukcji program będzie kontynuował sprawdzanie następnych warunków, chyba że natrafi na instrukcję break.

Skoro wartość zmiennej litera to 'B', wykona się linijka 10. Efekt byłby taki sam, gdyby litera była równa 'b'.

Skoro wartość zmiennej litera to wielkie 'B', wykona się linijka 10. Efekt byłby taki sam, gdyby litera była równa małe 'b'.

Polecenie default

W instrukcji wyboru wielokrotnego mamy do dyspozycji polecenie default. Oznacza ono: „w każdym przypadku”.

Innymi słowy default towarzyszy instrukcjom wykonywanym w sytuacji, gdy wartość zmiennej przekazanej poleceniu switch nie odpowiada żadnemu przypadkowi. Mamy dzięki temu pewność, że program wykona fragment kodu przypisany poleceniu default. Oto przykład:

Linia 1. int numer podkreślnik zawodnika znak równości 40 średnik. Linia 3. switch otwórz nawias okrągły numer podkreślnik zawodnika zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. case 0 dwukropek. Linia 5. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku z numerem 0 kropka. Linia 6. break średnik. Linia 7. case 1 dwukropek. Linia 8. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku z numerem 1 kropka. Linia 9. break średnik. Linia 10. case 2 dwukropek. Linia 11. prawy ukośnik prawy ukośnik wypisz informacje o zawodniku z numerem 2 kropka. Linia 12. break średnik. Linia 13. default dwukropek. Linia 14. prawy ukośnik prawy ukośnik nie ma zawodnika o podanym numerze. Linia 15. zamknij nawias klamrowy.

Wartość zmiennej numer_zawodnika nie pojawiła się w opisie żadnego przypadku, a zatem wykonane zostaną instrukcje towarzyszące słowu kluczowemu default. Jeżeli ten fragment kodu jest zapisany na końcu instrukcji wielokrotnego wyboru, nie ma potrzeby używania komendy break. W innym przypadku jest to niezbędne.

Słownik

break
break

używane w języku C++ polecenie służące do opuszczenia instrukcji switch po wykonaniu sekwencji komend odpowiadającej konkretnemu przypadkowi (case)