Wyobraźmy sobie sytuację, że mamy do napisania program, który będzie wykonywał pewną czynność zależną od wybranej opcji. Zadanie to można zrealizować za pomocą wielu instrukcji warunkowych if - else, albo skorzystać z wygodnej instrukcji wielokrotnego wyboru switch - case. Konstrukcja wygląda następująca:
switch(opcja) // ta część przełącza nas w odpowiednie miejsce,
// w zależności jaką wartość ma zmienna opcja
{ //klamra otwierająca blok switch
case etykieta_1:
//instrukcje dla opcji o wartości etykieta1
break; // to słowo kluczowe przerywa dalsze wykonywanie instrukcji
//i wychodzi z bloku switch
case etykieta_2:
//instrukcje dla opcji o wartości etykieta2
break;
......................
case etykieta_n:
//instrukcje dla opcji o wartości etykietan
break;
default: // ta część instrukcji switch jest opcjonalna
//instrukcje, które wykonają się w przypadku, gdy podana opcja nie istnieje
} //klamra zamykająca blok switch
Zasada działania jest bardzo prosta. Tworzymy zmienną (w przykładzie powyżej jest to zmienna opcja), której nadajemy wartość. Instrukcja switch przełączy nas w odpowiednie miejsce, gdzie wartość zmiennej jest równa wartości etykiety. Można opcjonalnie dodać alternatywę w postaci słowa kluczowego default. Gdy dana etykieta nie istnieje, program przeskoczy właśnie w to miejsce.
Jeśli chcemy zmienić zasięg zmiennych, można wstawić nawiasy klamrowe:
........
case etykietan:
{
//instrukcje dla opcji o wartości etykietan
break;
}
........
Słowo kluczowe break przerywa działanie instrukcji switch. Jeśli jednak chcemy, aby kilka etykiet zostało podpiętych pod jeden ciąg instrukcji, wtedy omijamy słowo break. Prześledźmy przykład:
Zadanie. Na wejściu podajemy jedną liczbę całkowitą. Program określa, czy jest to dzień roboczy, czy weekend lub wyświetla komunikat, że podana wartość nie jest numerem dnia tygodnia.
Rozwiązanie:
#include <iostream>
using namespace std;
int main()
{
unsigned short dzien;
cout<<"Podaj nr dnia tygodnia: ";
cin>>dzien;
switch(dzien)
{
case 1:
case 2:
case 3:
case 4:
case 5:
cout<<"Podany dzień jest dniem roboczym";
break;
case 6:
case 7:
cout<<"Mamy weekend";
break;
default:
cout<<"Nie ma takiego dnia";
}
return 0;
}
Przeanalizujmy powyższy program. Gdy np. zmienna dzien przyjmie wartość 2, to instrukcja switch przełączy nas w miejsce "case 2:", a następnie będzie przeskakiwać w dół do momentu napotkania słowa kluczowego break. W tym przypadku zatrzyma się dopiero po instrukcjach dla "case 5:".
Zadanie. Na wejściu pojawi się jeden znak. Jeśli jest to cyfra, program wyświetla jej nazwę, w przeciwnym razie wypisuje komunikat "To nie jest cyfra".
Rozwiązanie:
#include <iostream>
using namespace std;
int main()
{
char cyfra;
cout<<"Podaj jeden znak: ";
cin>>cyfra;
switch(cyfra)
{
case '0': //zwróć uwagę na apostrof
cout<<"zero";
break;
case '1': //zwróć uwagę na apostrof
cout<<"jeden";
break;
case '2': //zwróć uwagę na apostrof
cout<<"dwa";
break;
case '3': //zwróć uwagę na apostrof
cout<<"trzy";
break;
case '4': //zwróć uwagę na apostrof
cout<<"cztery";
break;
case '5': //zwróć uwagę na apostrof
cout<<"piec";
break;
case '6': //zwróć uwagę na apostrof
cout<<"szesc";
break;
case '7': //zwróć uwagę na apostrof
cout<<"siedem";
case '8': //zwróć uwagę na apostrof
cout<<"osiem";
break;
case '9': //zwróć uwagę na apostrof
cout<<"dziewiec";
break;
default:
cout<<"Podany znak nie jest cyfrą!";
}
return 0;
}
Pamiętaj, że znaki muszą być wpisane w pojedynczym apostrofie.