C-Tutorials.de Logo

zum Inhaltsverzeichnis

C Tutorial: Die Mehrfachverzweigung (switch-case)


Die Mehrfachverzweigung: switch-case

Gehen wir einmal von dem Fall aus, das eine Variable ausschließlich die Ganzzahlen von 1 bis 3 enthalten kann. Bei jedem Wert wollen wir einen anderen Code ausführen lassen. Mit if(-else) würde das so aussehen:

#include <stdio.h>

int main ()
{
int abc;

  printf("Bitte gib eine Ganzzahl ein: ");
  scanf("%i",&abc);

  if(abc == 1)
    {
      printf("\nDie Zahl, die du eingegeben hast, war 1."); //Wenn abc den Wert 1 enthält
    }

  if(abc == 2)
    {
      printf("\nDie Zahl, die du eingegeben hast, war 2."); //Wenn abc den Wert 2 enthält
    }

  if(abc == 3)
    {
      printf("\nDie Zahl, die du eingegeben hast, war 3."); //Wenn abc den Wert 3 enthält
    }

  getch();
}

Dies sollte dir klar sein.
Nun gibt es aber auch noch eine andere Möglichkeit dieses Problem zu lösen. Die Lösung heißt switch-case. Dieser Code macht genau das selbe wie der von oben:

#include <stdio.h>

int main ()
{
int abc;

  printf("Bitte gib eine Ganzzahl ein: ");
  scanf("%i",&abc);

  switch(abc) //Welche Variable wird überprüft
    {
      case 1: //Auf Wert 1 überprüfen
          printf("\nDie Zahl, die du eingegeben hast, war 1."); //WENN Wert 1
          break;

      case 2: //Auf Wert 2 überprüfen
          printf("\nDie Zahl, die du eingegeben hast, war 2."); //WENN Wert 2
          break;

      case 3: //Auf Wert 3 überprüfen
          printf("\nDie Zahl, die du eingegeben hast, war 3."); //WENN Wert 3
          break;
    }

  getch();
}

Hier schreibt man 'switch(Variable)'. Bei switch darfst du KEINE Bedingung in die Klammern schreiben! Hier wird die Variable nur auf ihren Wert überprüft und dann der entsprechende case (engl.: Fall) ausgeführt. Alle cases werden von 2 geschweiften Klammern eingerahmt '{ }'.
Ein case wird durch 'case [auf welche Zahl soll überprüft werden]:' definiert. Dahinter folgt der Code, der ausgeführt werden soll, und zum Schluss ein 'break;' um diesen case zu beenden.
Der Inhalt der Variable, die bei einem switch-case überprüft wird, MUSS eine Zahl sein. Sonst ist kein anderer Datentyp geeignet!!!

Aufgabe:

Jetzt darfst du deinen ersten eigenen Taschenrechner programmieren! Er soll folgendermaßen funktionieren: Am Anfang soll eine Usereingabe stattfinden, mit der festgelegt wird, ob +, -, * oder / gerechnet wird (z.B. mit den Zahlen 1-4). Modulo (%) lassen wir an dieser Stelle weg, weil es nur mit Integerzahlen funktioniert. Dann sollen die beiden (float-)Zahlen, für die Rechnung. eingegeben werden. Mit einem switch-case führst du nun die entsprechende Rechnung aus und gibst das Ergebnis am Schluss noch aus. Lösung:

#include <stdio.h>

int main ()
{
int auswahl;
float zahl1;
float zahl2;

  printf("Moechtest du +(1), -(2), *(3) oder /(4) rechnen?");
  printf("\nGib die entsprechende Zahl ein und druecke Enter: "); //Bitte gib ein...
  scanf("%i",&auswahl); //Auswahl einlesen

  printf("\n\nGib Zahl 1 ein: ");
  scanf("%f",&zahl1); //Zahl 1 einlesen
  printf("Gib Zahl 2 ein: ");
  scanf("%f",&zahl2); //Zahl 2 einlesen

  switch(auswahl) //Je nach Auswahl, die entsprechende Rechnung durchführen
    {
      case 1: // +
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 + zahl2); //Ausgabe der Lösung
          break;
      case 2: // -
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 - zahl2); //Ausgabe der Lösung
          break;
      case 3: // *
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 * zahl2); //Ausgabe der Lösung
          break;
      case 4: // /
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 / zahl2); //Ausgabe der Lösung
          break;
}

getch();
}

Du hast vielleicht gemerkt, dass das Programm kein Ergebnis liefert wenn du bei der Auswahl des Rechenzeichens z.B. eine 5 eingegeben hast. Für solche nicht definierten Fälle gibt es im switch-case einen besonderen Fall. Das else wenn man so will, wenn keiner der definierten Fälle zutrifft. Dieser ist der default-Fall und wird so definiert: 'default:'. Dannach folgt wieder der auszuführende Code und ein 'break;' zum Abschluss. Der default-Fall wird nach dem letzten definierten case ins switch geschrieben!
Und weil das nicht so schwer war, darfst du jetzt deinen Taschenrechner gleich mal ohne ein vorheriges Beispiel so verändern, das eine Fehlerausgabe angezeigt wird, wenn die Auswahl nicht zwischen 1 und 4 lag. Lösung:

#include <stdio.h>

int main ()
{
int auswahl;
float zahl1;
float zahl2;

  printf("Moechtest du +(1), -(2), *(3) oder /(4) rechnen?");
  printf("\nGib die entsprechende Zahl ein und druecke Enter: "); //Bitte gib ein...
  scanf("%i",&auswahl); //Auswahl einlesen

  printf("\n\nGib Zahl 1 ein: ");
  scanf("%f",&zahl1); //Zahl 1 einlesen
  printf("Gib Zahl 2 ein: ");
  scanf("%f",&zahl2); //Zahl 2 einlesen

  switch(auswahl) //Je nach Auswahl, die entsprechende Rechnung durchführen
    {
      case 1: // +
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 + zahl2); //Ausgabe der Lösung
          break;
      case 2: // -
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 - zahl2); //Ausgabe der Lösung
          break;
      case 3: // *
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 * zahl2); //Ausgabe der Lösung
          break;
      case 4: // /
          printf("\n\nDas Ergebnis deiner Rechnung lautet: %f",zahl1 / zahl2); //Ausgabe der Lösung
          break;
      default: //Diese Zeile ist neu
          printf("\n\nDeine Auswahl entspricht keinem definierten Rechenzeichen!"); //Diese Zeile ist neu
          break; //Diese Zeile ist neu
    }

  getch();
}

Grundsätzlich ist das 'break;' nach dem letzten case oder dem default nicht notwendig. Die meisten Programmierer schreiben es aber der Übersichtlichkeit halber trotzdem hin.

zum Inhaltsverzeichnis