Instrukcja SWITCH…CASE
Innym pomysłem na rozwiązanie problemu obsługi warunków jest instrukcja switch…case (czasami nazywana instrukcją wielokrotnego wyboru). Poniżej definicja i zaraz zabieram się do objaśniania kodu.
[cpp]
switch(zmienna)
{
case wartosc_1:
// jeżeli zmienna = wartość_1 to wykonaj kod który znajduje się tutaj
break;
case wartosc_2:
// jeżeli zmienna = wartość_2 to wykonaj kod który znajduje się tutaj
break;
//…
case wartosc_n:
// jeżeli zmienna = wartość_n to wykonaj kod który znajduje się tutaj
break;
default:
// kod który wykona się w momencie kiedy wartość zmiennej zmienna
// nie będzie oprogramowana w żadnym z powyższych przypadków
break;
}
[/cpp]
Na początku widzisz słówko switch i parametr w nawiasie. Tym parametrem jest wartość zmiennej i w zależności od tej wartości switch zachowa się tak jak to mu oprogramujemy. Po słówku case oprogramowujemy konkretne przypadki, co komputer ma zrobić w zależności od wartości zmiennej zdefiniowanej w parametrze instrukcji switch. Słówko break przerywa działanie instrukcji switch. Wykonamy teraz małe ćwiczenie napiszemy program który zapyta użytkownika o liczbę z przedziału od 1 do 5. Pobierzemy tą liczbę do zmiennej i w zależności od wybranej liczby wyświetlimy komunikat „Wpisales liczbe n, wiec wykonuje kod z czesci case:n”, gdzie pod n będziemy podstawiali liczbę podaną przez użytkownika. No to do dzieła.
[cpp]
#include <iostream>
using namespace std;
int main()
{
int liczba;
cout << "Podaj liczbe 1-5 : ";
cin >> liczba;
switch(liczba)
{
case 1:
cout << "Wpisales liczbe 1, wiec wykonuje kod z czesci case:1";
break;
case 2:
cout << "wpisales liczbe 2, wiec wykonuje kod z czesci case:2";
break;
case 3:
cout << "wpisales liczbe 3, wiec wykonuje kod z czesci case:3";
break;
case 4:
cout << "wpisales liczbe 4, wiec wykonuje kod z czesci case:4";
break;
case 5:
cout << "wpisales liczbe 5, wiec wykonuje kod z czesci case:5";
break;
}
return 0;
}
[/cpp]
Przetestujmy nasz program podając liczbę 2 (zrzut poniżej).
Widzimy, że wszystko poszło zgodnie z planem i wykonała się instrukcja dla wartości zmiennej liczba = 2.
A co się stanie jeżeli użytkownik podałby liczbę spoza zakresu np. 6 ? Przetestujmy.
Widzimy, że nic tragicznego się nie stało. Program „poszedł” dalej i nie wyświetlił żadnej instrukcji bo wartość 6 dla zmiennej liczba nie była oprogramowana w switch-u, więc kompilator nie wiedział co ma zrobić. Czasami jednak potrzebujemy oprogramować taką sytuację kiedy chcemy wykonać jakiś kod lub wyświetlić jakiś komunikat dla przypadku który jest inny niż oprogramowaliśmy w switch-u, jak np. u nas kiedy użytkownik podał liczbę 6. Do tego celu służy instrukcja default. Definiujemy ją identycznie jak w przypadku instrukcji case.
[cpp]
default:
cout << "liczba nie z przedzialu 1-5, wiec nie wykonam zadnego kodu";
break;
[/cpp]
Stosując instrukcję default mówimy kompilatorowi, że jeżeli nie znajdzie wartości z warunku oprogramowanej w instrukcji case to ma wykonać kod z części default. Dopiszmy tą część kodu do naszego programu i przetestujmy go.
[cpp]
#include <iostream>
using namespace std;
int main()
{
int liczba;
cout << "Podaj liczbe 1-5 : ";
cin >> liczba;
switch(liczba)
{
case 1:
cout << "Wpisales liczbe 1, wiec wykonuje kod z czesci case:1";
break;
case 2:
cout << "wpisales liczbe 2, wiec wykonuje kod z czesci case:2";
break;
case 3:
cout << "wpisales liczbe 3, wiec wykonuje kod z czesci case:3";
break;
case 4:
cout << "wpisales liczbe 4, wiec wykonuje kod z czesci case:4";
break;
case 5:
cout << "wpisales liczbe 5, wiec wykonuje kod z czesci case:5";
break;
default:
cout << "liczba nie z przedzialu 1-5, wiec nie wykonam zadnego kodu";
break;
}
cout << endl;
return 0;
}
[/cpp]
Uruchamiamy program i wprowadzamy wartość 6.
Widzimy na ekranie komunikat który oprogramowaliśmy dla warunku default, więc wszystko działa jak należy.