Autor: Dondu
Kurs języka C: Spis treści
Instrukcja switch( ) ... case ... jest instrukcją wyboru jednego z wielu przypadków. Ułatwia pisanie kodu w szczególności zastępuje stosowanie wielokrotnych if( ). W podstawowym zastosowaniu, na podstawie wyrażenia wybiera jedno z wielu rozwiązań. Ilość rozwiązań jest nieograniczona (choć może to zależeć od kompilatora) - w praktyce najczęściej kilka, kilkanaście.
switch (wyrazenie)
{
case wartosc_1: //gdy wyrażenie równa się wartosc_1
//... tutaj kod
break;
case wartosc_2: //gdy wyrażenie równa się wartosc_2
//... tutaj kod
break;
// i tak dalej
// .
// .
// .
default: //gdy żaden z wcześniejszych warunków nie został spełniony
//... tutaj kod
break; //ostatni break nie musi występować
}
Po każdym przypadku powinieneś umieścić instrukcję break; by zakończyć wykonywanie instrukcji switch. Jeżeli tego nie zrobisz program rozpocznie wykonywanie następnego case:, co doprowadzi do nieprawidłowego działania instrukcji switch. Od tej zasady są wyjątki (patrz przykład 2).
Poniżej przykład prostego użycia switch( ).
Przykład 1 (w kompilatorze)
//dla przykładu, jako wyrażenie zastosujemy zmienną o
int ilosc_koni = 50;
switch (ilosc_koni)
{
case 1: //gdy ilosc_koni równa się 1
printf("Jestem w A.");
break;
case 50: //gdy ilosc_koni równa się 50
printf("Jestem w B.");
break;
default: //gdy żaden z wcześniejszych warunków nie został spełniony
printf("Jestem w C.");
break; //ostatni break nie musi występować
}
Sprawdź w kompilatorze CManiak, jak będzie reagował program na zmiany wartości zmiennej ilosc_koni.Łączenie przypadków
Możliwe jest także łączenie reakcji na konkretne wartości.
Przykład 2 (w kompilatorze)
switch (ilosc_koni)
{
case 1: //gdy ilosc_koni równa się 1
case 5: //gdy ilosc_koni równa się 5
case 17: //gdy ilosc_koni równa się 17
case 53: //gdy ilosc_koni równa się 53
printf("Jestem w A.");
break;
case 50: //gdy ilosc_koni równa się 50
case 78: //gdy ilosc_koni równa się 78
printf("Jestem w B.");
break;
default: //gdy żaden z wcześniejszych warunków nie został spełniony
printf("Jestem w C.");
break; //ostatni break nie musi występować
}
Sprawdź w kompilatorze CManiak, jak będzie reagował program na zmiany wartości zmiennej ilosc_koni w przypadkach określonych w przedziałach case.
Przedziały liczbowe
Możliwe jest także wskazanie przedziału liczbowego.
Przykład 3 (w kompilatorze)
switch (ilosc_koni)
{
case 1 ... 3: //gdy ilosc_koni w przedziale od 1 do 3
printf("Jestem w A.");
break;
case 5 ... 9: //gdy ilosc_koni w przedziale od 5 do 9
printf("Jestem w B.");
break;
case 15 ... 43: //gdy ilosc_koni w przedziale od 15 do 43
printf("Jestem w C.");
break;
default: //gdy żaden z wcześniejszych warunków nie został spełniony
printf("Jestem w D.");
break; //ostatni break nie musi występować
}
Sprawdź w kompilatorze CManiak, jak będzie reagował program na zmiany wartości zmiennej ilosc_koni w przypadkach określonych w przedziałach case.
Kurs języka C: Spis treści
20





Odnośnie instrukcji switch (...) ... case .... Żeby później program nie zachowywał sie dziwacznie, najlepszy przykład będzie na listingu Przykład 2
OdpowiedzUsuńW każdym wyrażeniu case musi być zawarta komenda break; po wykonaniu akcji dla danej wartości wyrażenia. W przeciwnym wyadku skompilowany program po nie spotkaniu komendy break; będzie wykonywał kolejne instrukcje z kolejnych wartości case aż do spotkania komendy break;
W każdym bądź razie podane przykłady są poprawne :)
Faktycznie chociaż w kodach przykładów break'i są, to nie wyjaśniłem tego. Zaraz to nadrobię :)
OdpowiedzUsuń