Elektronika - baza wiedzy

Cześć 10 kursu C/C++


10. Instrukcja switch

Instrukcja switch jest odpowiednikiem pascalowej instrukcji case . Jeśli znasz pascala to już wiesz o co chodzi, jeśłi jednak nie, to zaraz zobaczysz jak to wygląda w praktyce i kiedy może się przydać. Załóżmy, że mamy taki oto program:

#include <stdio.h>


void main(void)

{

int a = 5;

if(a == 4) printf("Zmienna a jest rowna cztery. ");

else if((a == 5) || (a==6)) printf("Zmienna a jest równa piec lub szesc. ");

else printf("Zmienna a jest nie jest rowna ani cztery, ani piec, ani szesc. ");

}


Jaki widzisz program na podstawie wartości zmiennej a wypisuje na ekranie odpowiedni tekst. Aby ten cel osiągnąć musieliśmy zastosować sekwencję instrukcji if . Nie wygląda to jednak zbyt elegancko. Właśnie takim przypadku możemy użyć instrukcję switch . A oto jak będzie wyglądał nasz program przy jej użyciu:



#include <stdio.h>



void main(void)

{

int a = 5;

switch(a)

{

case 4 : printf("Zmienna a jest rowna cztery. ");

break;

case 5 :

case 6 : printf("Zmienna a jest rowna piec lub szesc. ");

break;

default: printf("Zmienna a jest nie jest rowna ani cztery, ani piec, ani szesc. ");

}

}


Według mnie jest to o wiele bardziej czytelne, czyż nie ?
Dobrze, napiszę więc coś więcej o samej konstrukcji. Generalnie wygląda ona tak:

switch(wyrażenie)

{

case wartosc1: instrukcje; break;

case wartosc2: instrukcje; break;

.

.

.

default: instrukcje;

}

Jak widzisz zaczynamy od słowa kluczowego switch . Zaraz po nim podajemy w nawiasie wyrażenie, od którego wartości będzie miała zależeć akcja, która zostanie wykonana. W naszym przykładowym programie chcieliśmy, żeby napis na ekranie był zależny od zmiennej a, więc wpisaliśmy tam po prostu "a". Jednak nic nie stoi na przeszkodzie, aby na przykład wpisać tam "a*3+b" (zakładając oczywiście, że zadeklarowaliśmy wcześniej zmienną b). Następnie otwieramy blok i wpisujemy po słowie kluczowym case wartości, które będą porównywane z tym wyrażeniem. Konstrukcja switch szuka pierwszej wartości, która jest równa wyrażeniu podanemu w nawiasie. Jeśli ją znajdzie to przekazuje wykonywanie programu do tego miejsca. Następnie wykonywane są kolejne instrukcje, aż do napotkania nawiasu klamrowego kończącego blok switch , albo aż do napotkania instrukcji break. Jeśli żadna z wartości podanych po case´ach nie jest równa danemu wyrażeniu to wykonywane są instrukcje po slowie kluczowym default (jego używanie nie jest konieczne - tak więc, jeśli się go nie wpisze to żadne działanie nie zostanie wykonane). W naszym przypadku zmienna a była równa pięć, tak więc wykonywanie programu zostało przekazane do miejsca, w którym mamy przypadek "case 5:". Ponieważ nie występuje po nim instrukcja break , to wykonywanie programu jest kontynuowane. W następnej linijce wyświetlany jest napis informujący o wartości zmiennej i program przechodzi do następnej linii. Mamy tam słowo kluczowe break , które kończy konstrukcję switch .
Gdyby zmienna a była równa cztery to przeszlibyśmy do linijki z "case 4:", wywołanaby była funkcja printf występująca dalej i program napotkałby instrukcję break , która zakończyłaby działanie konstrukcji switch .
Gdyby zaś zmienna ta była równa dziesięć, to przeszlibyśmy do linijki z "default:", wyświetlony byłby odpowiedni napis.
Na koniec jeszcze uwaga dla osób znających pascala - oczywiście odpowiednikiem przedstawionej tu instrukcji jest w tym języku instrukcja case.