ein Kapitel zurück                                           ein Kapitel weiter

Was machen sie wenn eine Abfrage für 5 oder mehr Zahlen machen wollen? Gut sie könnten jetzt dementsprechend viele 'if' - Anweisungen schreiben, aber warum so umständlich wenn es was einfacheres gibt? Für solche Aufgaben gibt es die Fallunterscheidung 'switch' was auf deutsch soviel wie Schalter heißt. Der Syntax von sieht in etwa so aus....

switch(AUDRUCK)
  {
     AUSDRUCK1 : anweisung1
     AUSDRUCK2 : anweisung2
     AUSDRUCK3 : anweisung3
     .......................
     AUSDRUCKn : anweisungn
  }


Der AUSDRUCK in den Klammern nach switch wird nun in dem folgenden Anweisungsblock ausgewertet. Sollte der AUSDRUCK==AUSDRUCK1 sein so wird die anweisung1 ausführt. Sollte aber AUSDRUCK==AUSDRUCK2 sein so wird eben die anweisung2 ausgeführt usw.

Also wollen wir unser Programm mal schreiben was die Zahlen 1-5 abfragt...

/*Download:switch1.c*/
#include <stdio.h>

int main()
{
int a;

printf("Bitte eine Zahl von 1-5 eingeben : ");
scanf("%d",&a);

switch(a)
{
case 1 : printf("Das war eins\n");
break;

case 2 : printf("Das war zwei\n");
break;

case 3 : printf("Das war drei\n");
break;

case 4 : printf("Das war vier\n");
break;

case 5 : printf("Das war fünf\n");
break;
} /*Ende switch*/
return 0;
}

Nach der Eingabe einer Zahl wird die Zahl in einem 'Schalter' ausgewertet mittels...

switch(a)

Die Auswertung steht wieder in dem Anweisungsblock in geschweiften Klammern. Als erstes wird...

case 1 : printf("Das war eins\n");

...ausgewertet. 'case' heißt auf deutsch Fall und so kann man sich das auch vorstellen. Als erstes wird geprüft ob der Fall der in switch(a) steht '1' war. Wenn ja wird das Programm ausgeben, das die Zahl eins ist...

break;

Das 'break' am Ende eines jeden Falles bedeutet das ab hier springt das Programm aus dem Anweisungsblock raus und setzt das Programm nach dem Block fort. In unserem Fall ist das das Ende des Programms. Wenn sie dieses 'break' nicht nach jedem Fall angeben wird der nächste Fall auch ausgegeben. Sehen wir uns mal einen Programmablaufplan dazu an. Die rotgepunktete Linie wäre der Fall, wenn sie break weglassen würden....

switch case


Das Weglassen von break hat aber auch den Vorteil das man mehrere Fälle unterscheiden kann. Unser obiges Programm missbrauchen wir mal wieder dazu...

/*Download:switch2.c*/
#include <stdio.h>

int main()
{
int a;

printf("Bitte eine Zahl von 1-5 eingeben : ");
scanf("%d",&a);

switch(a)
{
case 1 : printf("Das war eins oder...");
case 2 : printf("...zwei\n");
break;

case 3 : printf("Das war drei\n");
break;

case 4 : printf("Das war vier...");
case 5 : printf("oder fünf\n");
break;
} /*Ende switch*/
return 0;
}

Das Programm erzählt sich eigentlich selbst. Testen sie es dann wissen sie was ich meine. Ich habe lediglich zwei breaks aus dem Programm genommen...

Nun werden sich manche Fragen, was sie machen sollen wenn sie eine andere Zahl als 1-5 eingeben. Das Programm einfach ohne eine Meldung zu beenden ist unschön und der Benutzer weiß auch gar nicht wieso er das Programm nicht zum laufen gebracht hat. Dafür gibt es auch wieder eine Funktion mit dem Namen 'default' . Die wollen wir jetzt gleich wieder auf unser nächstes Programm loslassen. Außerdem möchte ich auch zeigen wie man andere Zeichen außer Zahlen dazu verwenden kann...

/*Download:switch3.c*/
#include <stdio.h>

int main()
{
int a,b;
char opera;

printf("1.Zahl : ");
scanf("%d",&a);

printf("Operator(+,-,*,/): ");
scanf("%c",&opera);

printf("2.Zahl : ");
scanf("%d",&b);

switch(opera)
{
case '+' : printf("%d + %d = %d\n",a,b,a+b);
break;

case '-' : printf("%d - %d = %d\n",a,b,a-b);
break;

case '*' : printf("%d * %d = %d\n",a,b,a*b);
break;

case '/' : printf("%d / %d = %d\n",a,b,a/b);
break;

default : printf("'%c' ist kein Rechenoperator\n",opera);
break;
} /*Ende switch*/
return 0;
}

Jetzt habe sie gesehen wie es möglich ist jedes beliebige darstellbare ASCII - Zeichen auf die Funktionen switch...case loszulassen. Zeichen werden zwischen einzelnen Hochkommatas gestellt. Natürlich wäre es auch möglich anstatt...

case '+' : printf("%d + %d = %d\n",a,b,a+b);

...eben...

case 43 : printf("%d + %d = %d\n",a,b,a+b);

...zu schreiben, da ja das Zeichen '+' den dezimalen Wert von 43 hat (siehe ASCII - Tabelle). Auch könnte man die Oktalzahl '053' oder die Hexzahl '2B' verwenden. Das bleibt Ihnen überlassen. Wen es interessiert hier die Schreibweise für die Hexzahl von 43...

case 0x2B : printf("%d + %d = %d\n",a,b,a+b);

Auch haben sie in dem Programm oben kennen gelernt...

default : printf("'%c' ist kein Rechenoperator\n",opera);

Falls sie keine gültigen Rechenoperator eingegeben haben bekommen sie eine dementsprechende Meldung. default bedeutet soviel wie der Übriggebliebene.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf