News Ticker

C 10: Kontrollstrukturen, Verzweigungen

Bis jetzt laufen alle Programme nur sequenziell ab. Das ist toll, aber nicht wirklich bahnbrechend. Damit man auf Benutzereingaben dynamisch reagieren kann, hat man Kontrollstrukturen erfunden. Da es davon einige in C gibt, sollen heute erst einmal die Verzweigungen vorgestellt werden. Bei Verzweigungen handelt es sich im weitesten Sinn um Fragen: Ist diese Zahl größer als 5?. Bei Schleifen (diese werden im nächsten Artikel beschrieben) sind es eher Solang-bis-Beziehungen: Solang diese Variable kleiner als 5 ist...

Das if/else if/else-Konstrukt ist eigentlich selbsterklärend. Hierzu ein Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int main()
{
        int a = -1;
 
        printf("Zahl eingeben: ");
        scanf("%d", &a);
 
        if(a < 0) // a ist kleiner 0
        {
                printf("Zahl ist kleiner 0\n");
        }
        else if(a > 0) // a ist groesser 0
        {
                printf("Zahl ist groesser 0\n");
        }
        else // a ist 0
        {
                printf("Zahl ist 0\n");
        }
 
        return 0;
}

Dieses Programm prüft, in welchen Wertebereich die eingegebene Zahl fällt. Die geschweiften Klammern bilden einen Block, der aus mehreren Zeilen bestehen kann. Handelt es sich nur um eine Zeile, können die geschweiften Klammern also weggelassen werden, was das Programm gleich viel kompakter wirken lässt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
        int a = -1;
 
        printf("Zahl eingeben: ");
        scanf("%d", &a);
 
        if(a < 0)
                printf("Zahl ist kleiner 0\n");
        else if(a > 0)
                printf("Zahl ist groesser 0\n");
        else // a == 0
                printf("Zahl ist 0\n");
 
        return 0;
}

Wer jedoch viele Werte zu vergleichen hat, kann auch switch benutzen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
  int a = 0;
 
  printf("Zahl eingeben: ");
  scanf("%d", &a);
 
  switch(a)
  {
    case 10: printf("Zahl ist 10\n");
              break;
    case 20: printf("Zahl ist 20\n");
              break;
    case 30: printf("Zahl ist 30\n");
              break;
 
    default: printf("Unbekannte Zahl!\n");
 
  }
}

In der switch-Anweisung wird ein Ausdruck ausgewertet (hier nur die Zahl selbst) und danach zu dem entsprechenden Eintrag gesprungen, z.B. case 30. Hier können auch mehrere Linien stehen und abgearbeitet werden. Wichtig ist aber, das break nicht zu vergessen, dass aus einem case-Eintrag herausspringt. Sollte man z.B. alles breaks vergessen, werden alle Strings ausgegeben.

Mehr zu break und weiteren sehr wichtiges Kontrollstrukturen gibt's das nächste Mal. Da sind Schleifen und noch einige Modifikatoren an der Reihe.