Strona główna » Kursy » Kurs C++ » Instrukcja Switch
 

Instrukcja Switch

Pierwsza myśl

Podczas pisania aplikacji może zajść potrzeba sprawdzić, który warunek jest prawdziwy i tylko jeden argument taki może być. Wtedy można użyć instrukcji if .. else. Jeśli będzie potrzeba dodać kolejny warunek wystarczyłoby dopisać kolejną klauzulę else. Przypuśćmy, że wczytujemy od użytkownika wczytujemy liczbę a. W zależności od jej wartości chcemy wyświetlić informację. Dla podanej liczby może być wyświetlony tylko jeden komunikat. W przypadku, gdy do danej wartości nie ma przypisanego komunikatu powinna zostać wyświetlona informacja o nieprawidłowej liczbie. Przykładowo implementacja wygląda następująco:

  1. int main() {
  2.   int a;
  3.   cin >> a;
  4.   if (a == 0){
  5.     cout << "Pierwszy komunikat\n";
  6.   } else if (a == 1){
  7.     cout << "Drugi komunikat\n";
  8.   } else {
  9.     cout << "Nieprawidlowa wartosc\n";
  10.   }
  11.   system("pause");
  12.   return 0;
  13. }

Powyższy program (3.) wczytuje od użytkownika wprowadzoną liczbę a. W zależności od wartości a: dla a = 0 (5.), a = 1 (7.), a dla każdej innej wartości a (9.).

Instrukcja switch

Powyższy pomysł na rozwiązanie problemu jest bardzo prosty i w pełni prawidłowy. Jednak nie powinno stanowić problemu wyobrażenie sobie pisania w ten sposób 100 różnych warunków. Nieważna byłaby tu długość ostatecznego kodu źródłowego, a możliwość bardzo łatwej pomyłki. Jak wiadomo w programie wszystkie operatory i inne symbole muszą być w określonych miejscach, bo inaczej kod stanie się niezrozumiały dla kompilatora. Rozwiązaniem jest tutaj instrukcja switch. Pozwala ona na wybranie fragmentu kodu do wykonania w zależności od przekazanej wartości (np. przechowywanej w zmiennej). Składnia tej instrukcji jest następująca:

  1. switch ([wartość]){
  2.   case [wartosc1]:
  3.     [instrukcje1]
  4.   break;
  5.   ...
  6.   case [wartoscn]:
  7.     [instrukcjen]
  8.   break;
  9.   default :
  10.     [instrukcje]
  11.   break;
  12. }

(1.) Używamy instrukcji switch. Wybór fragmentu kodu ma nastąpić na podstawie przekazanej wartości [wartość]. Następnie w nawiasach wąsatych przekazujemy przypadki (ang. case). Każdy przypadek zaczyna się od instrukcji case. Po niej jest przerwa i wartość identyfikująca ten przypadek. Po dwukropku należy podać listę instrukcji do wykonania. Na koniec używa się instrukcji break;, aby przerwać wykonywanie pętli switch. Bez niej program wykonywałby dalsze instrukcje w następnym przypadku w kolejności w jakiej występują w kodzie. Wyróżnia się specjalny przypadek default dla którego nie określa się wartości. Jest to fragment kodu, który zostaje wykonany tylko wtedy, gdy żaden z poprzednich warunków nie został spełniony. Ten przypadek powinien zostać użyty jako ostatni!

Ulepszona pierwsza myśl

Zapisanie kodu aplikacji przy użyciu instrukcji switch będzie wyglądać następująco:

  1. int main() {
  2.   int a;
  3.   cin >> a;
  4.   switch (a){
  5.     case 0:
  6.       cout << "Pierwszy komunikat\n";
  7.     break;
  8.     case 1:
  9.       cout << "Drugi komunikat\n";
  10.     break;
  11.     default:
  12.       cout << "Nieprawidlowa wartosc\n";
  13.     break;
  14.   }
  15.   system("pause");
  16.   return 0;
  17. }

Teraz kod jest zdecydowanie bardziej przejrzysty, a kolejne przypadki można dodawać w znacznie prostszy sposób.

Zastosowanie

Funkcję switch można zastosować do tworzenia pewnego rodzaju menu. Przykładowa aplikacja będzie wczytywać dwie liczby. Następnie zapyta się jaką operację chcemy wykonać. Użytkownikowi zostanie wyświetlony komunikat, aby mógł wybrać operację wpisując odpowiednią liczbę:

  1. int main() {
  2.   double a, b; int o;
  3.   while (true){
  4.     cout << "Podaj dwie liczby:";
  5.     cin >> a >> b;
  6.     cout << "Co chcesz wykonac? (1) Dodawanie (2) Odejmowanie :";
  7.     cin >> o;
  8.     switch (o){
  9.     case 1:
  10.       cout << "a + b = " << (a + b) << endl;
  11.       break;
  12.     case 2:
  13.       cout << "a - b = " << (a - b) << endl;
  14.       break;
  15.     default:
  16.       cout << "Nieznana operacja\n";
  17.       break;
  18.     }
  19.   }
  20.  
  21.   system("pause");
  22.   return 0;
  23. }

(2.) Deklarujeym trzy zmienne: a, b - dwie liczby na których wykonamy operacje oraz o - wczyta którą operacje. (3.) W nieskończoność: (4.) informacja dla użytkownika i (5.) wczytujemy a i b. Następnie (6.) pokazujemy dostępne operacje i (7.) wczytujeym wybraną. (8. - 18.) W zależności od wybranej operacji pokazujemy odpowiedni komunikat.

Podsumowanie

Lekcja 10 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

Zmień kod źródłowy zastosowanie, aby dodatkowo można było wybrać operację mnożenia i dzielenia.

Zadanie 2

Napisz aplikację, która wczyta od użytkownika kolejno liczbę a, znak operacji o i drugą liczbę b. Program w zależności od wczytanego argumentu o powinien wypisać wynik odpowiedniej operacji lub pokazać komunikat o tym, że operacja jest nieznana. Przykładowo dla 2 - 3 program powinien wypisać -1.