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ń