Podręcznik
2. Instrukcja wielokrotnego wyboru
W przypadku gdy istnieje konieczność wyboru z kilku możliwości możemy skorzystać z instrukcji warunkowej if. W przypadku kilku możliwych przypadków do wyboru jest to wystarczające. Jeżeli jednak chcemy dokonać wyboru z kilkudziesięciu przypadków wielokrotne wykorzystanie instrukcji warunkowej if może nie być zbyt wygodnym rozwiązaniem. Aby ułatwić zapis takiego i podobnych przypadków, kiedy wybieramy jedną opcję z wielu, powstała instrukcja wielokrotnego wyboru, tzw. instrukcja switch. Instrukcja switch jest kolejną, po if-ach, instrukcją strukturalną, jaką poznajecie. Ale jest to pojedyncza instrukcja i wszędzie tam, gdzie składnia języka dopuszcza jedną instrukcję, możemy ją wstawić.switch (selektor)
{
case wart_11 : case wart_12 : ... : case wart_1i : Instrukcja_1; break;
case wart_21 : ... : case wart_2j : Instrukcja_2; break;
...
case wart_n1 : ... : case wart_nm : Instrukcja_n; break;
default : Instrukcja_inna;
}
Poniżej przedstawiono prostą symulację, która demonstruje działanie instrukcji wielokrotnego wyboru switch.
Wybierz wartość zmiennej n
i zobacz, jak działa instrukcja switch
w C++ z animacją:
switch (n) { case 1: cout << "Case 1"; break; case 2: cout << "Case 2"; break; case 3: cout << "Case 3"; break; case 4: cout << "Case 4"; break; default: cout << "Default case"; }
Na podsatwie symulacji możemy omówić działanie instrukcji switch. W zależności od wartości selektora, który jest umieszczony po instrukcji case zostaje wywołana dana grupa instrukcji występująca po dwukropku. Jeżeli wartość nie występuje po żadnym case to zostanie wykonany ciąg instrukcji, oddzielonych średnikami, znajdujący się po słowie default. Należy zaznaczyć, że w symulacji w każdym bloku instrukcji przypisanych do danej wartości selektora występuje instrukcja break. Instrukcja break powoduje przerwanie operacji switch oraz przejście do nawiasu zamykającego instrukcję wielokrotnego wyboru switch. Instrukcja break nie jest obligatoryjna. W przypadku gdy słowo break występuje, wykonana zostanie jedynie instrukcja przypisana do danej listy wartości. W przypadku gdy break nie będzie, wykonana zostanie instrukcja przypisana do danej wartości i wszystkie następne instrukcje, włącznie z tą przypisaną do default - aż do napotkania break lub końca instrukcji.