Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 10 lutego 2011

Instrukcja warunkowa: switch (...) ... case ....


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 switchOd 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
Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

2 komentarze:

  1. Odnośnie instrukcji switch (...) ... case .... Żeby później program nie zachowywał sie dziwacznie, najlepszy przykład będzie na listingu Przykład 2
    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 :)

    OdpowiedzUsuń
  2. Faktycznie chociaż w kodach przykładów break'i są, to nie wyjaśniłem tego. Zaraz to nadrobię :)

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.