Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

3.3 Das switch case Statement

3.3 Das switch case Statement

Möchte man eine komplexere Fallunterscheidung treffen, ist die switch Anweisung geeigneter und wesentlich übersichtlicher, da man nicht so viele if Anweisungen ineinander zu verschachteln braucht.

Das Schema sieht so aus: switch (<Ganzzahlausdruck>) { (case <Ganzzahlkonstante>: [<Anweisung> ... [break]]) ... [default: <Anweisung> ...] }

Zudem gibt es die Möglichkeit, einen Standardfall, den "default" zu definieren. Er ist optional und verhält sich wie ein Else-Block. Er wird ausgeführt, wenn keine der Fälle zutrifft.

Strukturgramm einer Switch-Anweisung

Allerdings gibt es da zwei Sachen, die Sie beachten sollte. Man kann erstens nur eine Unterscheidung von ganzen Zahlen oder einzelnen Zeichen machen und zweitens sollte jede Fallunterscheidung mit einer "break" Anweisung abgeschlossen werden, da ansonsten der nächste Fall auch ausgeführt wird. Dies kann sogar manchmal gewollt sein, ist aber dennoch die häufigste Fehlerursache bei Anfängern, die sich wundern, warum mehr passiert als gewollt. Im Nachstehendem PAP habe ich dieses Verhalten einmal aufgezeigt.

PAP einer switch Anweisung (mit und ohne "break")

Nachstehend sehen Sie zwei Quelltexte, in welchen ich den Umgang mit der switch Anweisung demonstriere. Ersteres benutzt die "break" Anweisung und letzteres nicht.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
					
int iZahl	= 0;

// Je nachdem, welche Zahl vorliegt
switch (iZahl) {
	case 0:	// da hier kein break steht, wird case 1 benutzt
	case 1:	// da hier kein break steht, wird case 2 benutzt
	case 2:	// da hier kein break steht, wird case 3 benutzt
	case 3:	// iZahl = 3
		printf("iZahl ist kleiner gleich 3");
		break;
		
	case 10:	
		printf("iZahl = 10");
		break;
		
	default:
		printf("iZahl ist weder kleiner 0, noch kleiner gleich 3, noch 10");
		// break braucht hier nicht zu stehen, da nach default nichts mehr kommen darf
} // end of switch
					

Ausgabe:

iZahl ist kleiner gleich 3
		

oder

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
					
int iBasis			= 5;
int iExponent			= 3;
int iErgebnis			= 1;

// Je nachdem, welche Zahl vorliegt
switch (iExponent) {
	case 5:
		iErgebnis	*= iBasis;
	case 4:
		iErgebnis	*= iBasis;
	case 3:
		iErgebnis	*= iBasis;
	case 2:
		iErgebnis	*= iBasis;
	case 1:
		iErgebnis	*= iBasis;
} // end of switch

printf("iErgebnis = %i", iErgebnis);
					

Ausgabe:

iErgebnis = 125
		

Wie Sie an der letzten Ausgabe sehen, habe ich hier gezielt den Effekt genutzt, dass die anderen Fälle durchlaufen werden, denn sonst würde nicht 125 ausgegeben werden, sondern 5. Ein sinnvoller Anwendungsfall für ein solches Verhalten wäre z.B. eine Rechtevergabe mit zunehmenden Rechten. Man prüft z.B. was für eine Art Person vorliegt und fängt dann mit der Person an, die am meisten darf und dann die, die immer weniger dürfen. Besucher dürfen z.B. nur etwas lesen, interne Mitarbeiter etwas lesen und umbenennen und nur der Chef darf alles, also lesen, umbenennen und löschen. Ist der Fall Chef der erste, bekommt er sein Sonderrecht + das Recht des Mitarbeiters und noch das Recht des Besuchers.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012