12.2 switch

Mit der switch-Anweisung kann man in Abhängigkeit von einem numerischen Ausdruck zu einer bestimmten Anweisung springen.

Direkt nach dem Schlüsselwort switch folgt in runden Klammern ein numerischer Ausdruck, der ausgewertet wird. Danach folgt ein Block von Anweisungen. Vor jeder Anweisung in diesem Block dürfen eine oder mehrere case-Marken stehen. Eine solche Marke besteht aus dem Schlüsselwort case, einer ganzzahligen Konstanten und einem Doppelpunkt. Die default-Marke steht für alle Werte, zu denen kein case angegeben ist und kann auch weggelassen werden.

Wird eine Marke angesprungen, dann hindern folgende Marken nicht den Programmfluß. Dies kann mit einer break-Anweisung verhindert werden.

Beispiel:

/* koswitch.c 30. 7.95 kw
 */

int main()
{
  int i;

  /* Einlesen einer ganzen Zahl von der Tastatur:
   */
  scanf( "%d", &i );

  /* Je nach dem, welchen Wert i hat, zu einer der
   * case-Marken springen:
   */
  switch( i )
  {
    case 1:
      puts( "i ist 1" );
    case 2:
    case 3:
      puts( "i ist 1, 2 oder 3" );
      break;
    case 9:
      puts( "i ist 9" );
    default:
      puts( "was weiss denn ich" );
  }

  puts( "fertig." );  /* Schlusstext.
                       */
  return 0;
}

Dieses Programm liest eine Zahl (mit sscanf()) ein und verzweigt je nach dem Wert zu einer Anweisung in dem switch-Block.

Wurde der Wert 1 gelesen, dann springt das Programm zu der ersten puts( ¨i ist 1¨ )-Anweisung. Die nach case 3: folgende Anweisung wird aber auch noch ausgeführt; erst dann wird mit break die switch-Konstruktion verlassen und mit puts( ¨fertig.¨ ); fortgefahren.

Ebenso wird im Falle von i==9 auch der default-Teil mit ausgeführt.

Achtung! Wie in jedem Block dürfen auch in dem Anweisungsblock einer switch-Anweisung Variablen vereinbart werden. Allerdings dürfen diese Variablen bei ihrer Vereinbarung NICHT initialisiert werden! Ob ein Compiler dies allerdings als Fehler erkennt, ist fraglich. In jedem Fall wird eine solche Initialisierung nie ausgeführt!

AnyWare@Wachtler.de