Jason. Cała informatyka w jednym miejscu!

Instrukcja wielokrotnego wyboru. Coś Wam to mówi? To kolejny ze sposobów czytelniejszego zapisu rozgałęzienia instrukcji warunkowej. W odróżnieniu od poprzednio omawianego operatora trójargumentowego, pozwala to obsłużyć wiele wartości w jednej klauzuli. Nie myślcie tylko, że to jest zapis bez wad bo jak w całej informatyce, wszystko ma swoje plusy i minusy. Zachęcam do lektury.

INSTRUKCJA WIELOKROTNEGO WYBORU. WYJAŚNIENIE I ZASTOSOWANIE

Tytułowy "przełącznik" (albo bardziej elegancko, "switch") jest kolejną odmianą możliwości sterowania przebiegiem programu w zależności od spełnionych warunków. Działa tak samo jak rozgałęziony "if else", tylko udostępnia piękniejszą, czytelniejszą i bardziej profesjonalną formę zapisu. Instrukcja "switch" w języku C wygląda w taki sposób:

switch (zmienna typu liczba całkowita)
{
	case warunek1:
		instrukcja1;
		break;
		
	case warunek2:
		instrukcja2a;
		instrukcja2b;
		break;
		
	case warunek3:
	case warunek4:
		instrukcja3;
		break;

	default:
		instrukcja4;
}

Po słowie kluczowym "switch", wprowadzamy w środek nawiasów zmienną przechowującą liczbę całkowitą. Może to być również zmienna znakowa (char) albo typ wyliczeniowy znany pod słowem "enum". Potem po otwarciu bloku kodu inicjujemy warunek za pomocą słowa kluczowego "case". Następnie dorzucamy stałą wartość liczbową, a po niej znak dwukropka. W nowej linii kodu wprowadzamy dowolne instrukcje, które mają dotyczyć określonego warunku.

Instrukcja wielokrotnego wyboru wymaga wprowadzenia słowa "break", aby poinformować komputer jak "daleko" określone instrukcje mają być wykonywane. Tutaj występuje mała pułapka! Pominięcie tego słowa nie spowoduje błędu. Zamiast tego, gdy dany przypadek zostanie spełniony i nie napotka na "break", wtedy komputer "przeskoczy" kolejną klauzulę "case" i zacznie wykonywać instrukcje NASTĘPNEGO warunku!!! Dlatego nie zapominajcie o "zaznaczeniu" końca instrukcji dla danego przypadku, jeśli dany "case" ma jakieś instrukcje. W przeciwnym wypadku zostawiacie to w takiej postaci jak na powyższym fragmencie z warunkiem #3 i #4. Taki zapis również nie jest błędny i spowoduje potraktowanie tych przypadków jak alternatywy (jeśli warunek #3 jest prawdziwy LUB warunek #4 jest prawdziwy).

"Przełącznik" jest bardzo elastyczny, ale trzeba mieć na względzie te drobne pułapki, o których przed chwilą skończyłem pisać. Poniższa "klasyczna" instrukcja warunkowa charakteryzuje się identycznym działaniem w porównaniu do powyższego fragmentu:

if(warunek1)
	instrukcja1;
else if(warunek2)
{
	instrukcja2a;
	instrukcja2b;
}
else if(warunek3 || warunek4)
	instrukcja3;
else
	instrukcja4;

Instrukcja wielokrotnego wyboru powinna być jak najbardziej wykorzystywana, ale pod pewnymi warunkami opisanymi powyżej. Trzeba uważać na te drobne pułapki, ponieważ istnieje kilka sposobów zapisu, które komputer może zinterpretować zupełnie inaczej niż przewidywano.

Drugą istotną wadą używania instrukcji "switch" jest możliwość wstawiania WYŁĄCZNIE samych stałych do sprawdzenia! To znaczy, że jeśli uzależniamy działanie programu od liczby mieszczącej się w podanym przedziale, to wtedy musicie przesiąść się na "if" i napisać to w sposób tradycyjny:

case > 12:	// niedopuszczalne!
Instrukcja wielokrotnego wyboru ("switch")

Przełącznik (ang. "switch") umożliwia dużo czytelniejszą obsługę wielu rozgałęzień zawartych w klauzulach "if else" w postaci objęcia wszystkich przypadków w jeden uszeregowany blok.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Po takiej charakterystyce tytułowej instrukcji ponownie zostawię Wam przykład ilustrujący zastosowanie "switch'a" w praktyce. Język C, oczywiście:

#include <stdio.h>
 
int main(void)
{
	int i = 0, x = 0;
	
	puts("Wprowadz wartosc dla zmiennej i (0 / 1 / 2 / 3)");
	scanf("%d", &i);
	
	switch (i)
	{
		case 0:
			x = 5;
			break;
			
		case 1:
			x = 26;
			break;
			
		case 2:
		case 3:
			x = 45;
			break;
 
		default:
			x = -1;
	}
	
	printf("Wartosc zmiennej x jest rowna %d.\n", x);
	getchar();
	
	return 0;
}

Wszystko na ten temat. Cóż więcej można dodać?

PODOBNE ARTYKUŁY