Programmieren
 
 
 
 
 
C-Grundkurs
 
 
 
 
 
.. SWITCH  -Vzweigung
 
 

 
 
 
 
 
Die switch -Abfrage und ihre Verzweigungen können nur innerhalb von Funktionen benutzt werden, auch wenn ihre Syntax der einer Funktion ähnlich ist. Ihre Aufgabe ist folgende..

Zwischen den runden Klammern des switch - Kopfes muss ein Ausdruck stehen, der sich zu einer Ganzzahl (einem Integer) auswerten lässt, oder eine Variable die einen Integer beinhaltet. Dieser wird mit den Konstanten hinter den 'case' -Anweisungen auf Gleichheit verglichen.

Trifft es zu, dass die 'int Variable' mit einer der Konstanten gleich ist, dann werden alle nachfolgenden Anweisungen, mit Ausnahme der Anweisungen des default-Blocks bearbeitet. Auch dann, wenn vor ihrer Zeile wiederum 'case Konstante:' steht. Will man, dass die Bearbeitung der Anweisungen nach einem gelungenen Vergleich, vor dem Erreichen des Endes der case - Liste abbricht, so muss hinter der letzten gewünschten Anweisung das Schlüsselwort 'break' stehen.

Die Anweisungen nach 'default:' werden nur dann durchlaufen, wenn keiner der vorherigen Vergleiche zutraf. Die 'default' - Zeile ist optional.

Achtung: Die Anweisungen hinter 'case' oder 'default', die auch auf Einzelzeilen verteilt werden können, müssen nicht in geschweifte Klammern gesetzt werden. Geschieht dies trotzdem, ändert das nichts an der zuvor beschriebenen Arbeitsweise. Mit Anweisungen sind alle gültigen C–Befehle und Funktionen gemeint, also von den Schleifenkonstruktionen über die if-elseif-else Abfrage bis hin zu untergeordneten switch Abfragen.
 
 
Syntax:
 
 
// linearer Programmteil
switch (int Variable)
{
  case Konstante1: Anweisung; [Anweisung;] [break;]
  case Konstante2: Anweisung;
  case Konstante3: Anweisung; [Anweisung;]
  case Konstante4: Anweisung; [break;]
  ..
  [default: Anweisung;[Anweisung;]]
}
// linearer Programmteil Fortsetzung
 
 
 
 
 

Beispiel:

 
 

 
#include <conio.h>                    // für getch() und printf()

void main (void)
{
  char c;

  start:
  c= getch();                         // Eingabezeichen holen
  switch (c)                          // ..folgend vergleichen
  {
    case  'M': printf("Mo");          // .. Ausgabe Mo,Di,Fr
    case  'D': printf("Di");          // .. Ausgabe    Di,Fr
    case  'F': printf("Fr");   break; // .. Ausgabe       Fr, ende

    case 0x1B:                return; // [ESC] Programmabbruch

    case  'R':
    case  'r': c=50+10;               // [r][R] rechnen und
               printf("%u",c);        // .. Ausgabe       60, ende
                                      //    wegen folgendem default

    default  : putch(c);              // kein Vergleich traf  zu,
                                      // Tastendruck ausgeben
  }
  goto start;
}

 


 

 
 
 
 
Bemerkungen:
 
 
  • Die switch (int Variable) muss ein Ganzzahltyp sein, sie darf keine Fliesskommazahl sein.
  • Hinter case muss eine Konstante stehen, keine Variable.
  • Es können mehrere case Konstante: Zeilen hintereinander folgen ohne eine Anweisung dahinter.
  • Die Anweisungen hinter case Konstante: müssen nicht in { .. } geschweiften Klammern stehen.
  • Die Anweisungen können auf untereinanderliegenden Zeilen stehen.
  • Nach einem gelungenen Vergleich (auf Gleichheit) werden alle Anweisungen bis vor die default: -Zeile abgearbeitet oder bis zu einem break.
  • Die default: -Zeile ist optional (wahlweise)
  • Es darf nur eine default: -Marke geben
  • Die default: -Zeile und ihre Anweisungen werden durchlaufen, wenn keiner der vorherigen Vergleiche zutraf.
 
 
 
 
www..de