Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Download:
- ZIP, ca. 10,6 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1411-7
Pfeil 8 Kontrollstrukturen
Pfeil 8.1 Verzweigungen mit der »if«-Bedingung
Pfeil 8.1.1 Anweisungsblock
Pfeil 8.2 Die Verzweigung mit »else if«
Pfeil 8.3 Die Verzweigung mit »else«
Pfeil 8.4 Der !-Operator (logischer Operator)
Pfeil 8.5 Logisches UND (&&) – logisches ODER (||)
Pfeil 8.6 Der Bedingungsoperator »?:«
Pfeil 8.7 Fallunterscheidung: die »switch«-Verzweigung
Pfeil 8.7.1 default
Pfeil 8.8 Die »while«-Schleife
Pfeil 8.8.1 Endlosschleife (»while«)
Pfeil 8.8.2 Fehlervermeidung bei »while«-Schleifen
Pfeil 8.9 Die »do while«-Schleife
Pfeil 8.10 Die »for«-Schleife
Pfeil 8.10.1 Einsatzmöglichkeiten der »for«-Schleife
Pfeil 8.11 Kontrollierte Sprünge
Pfeil 8.11.1 continue
Pfeil 8.11.2 break
Pfeil 8.12 Direkte Sprünge mit »goto«
Pfeil 8.13 Notationsstil
Pfeil 8.13.1 K&R-Stil
Pfeil 8.13.2 Whitesmith-Stil
Pfeil 8.13.3 Allman-Stil
Pfeil 8.13.4 GNU EMACS-Stil
Pfeil 8.13.5 Der Stil des Autors ;) (K&R-like)


Galileo Computing - Zum Seitenanfang

8.7 Fallunterscheidung: die »switch«-Verzweigung Zur nächsten ÜberschriftZur vorigen Überschrift

Was ist zu tun, wenn unterschiedliche Bedingungen mehrere verschiedene Zahlen beachten sollen? Sie könnten entsprechend viele if-Anweisungen verwenden. Aber warum so umständlich, wenn es auch einfacher geht? Für solche Aufgaben gibt es die Fallunterscheidung mit switch, was auf Deutsch so viel wie »Schalter« heißt. Die Syntax von switch sieht so aus:

switch(AUSDRUCK) {
     AUSDRUCK_1 : anweisung_1
     AUSDRUCK_2 : anweisung_2
     AUSDRUCK_3 : anweisung_3
     ...
     AUSDRUCK_n : anweisung_n
  }

Der AUSDRUCK in den Klammern nach switch wird im darauf folgenden Anweisungsblock ausgewertet. Sollte der AUSDRUCK==AUSDRUCK_1 sein, so wird anweisung_1 ausgeführt. Sollte aber AUSDRUCK==AUSDRUCK_2 sein, so wird die anweisung_2 ausgeführt usw. Hier ist ein Programm, das Sie nach den Zahlen 1 – 5 fragt:

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

int main(void) {
   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 diese im Schalter ausgewertet mit:

switch(a)

Die Auswertung steht wieder in einem Anweisungsblock in geschweiften Klammern. Zuerst wird

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

ausgewertet. case heißt auf Deutsch »Fall«. Zuerst wird geprüft, ob der Fall, der in switch(a) steht, zutrifft (also hier, ob a==1). Wenn ja, wird das Programm den entsprechenden Text ausgeben.

break;

Die break-Anweisung am Ende eines jeden Falls bedeutet: Ab hier springt das Programm aus dem Anweisungsblock heraus und setzt seine Ausführung nach dem switch-Anweisungsblock fort. In unserem Fall endet das Programm dann bereits. Wenn break nicht nach jedem Fall angegeben wird, wird der nächste Fall auch ausgegeben. Sehen Sie sich einen Programmablaufplan dazu an (siehe Abbildung 8.8).

Das Weglassen von break kann aber durchaus gewollt sein. Dies hat den Vorteil, dass Sie in gewisser Weise auf mehrere Fälle gleichartig reagieren können. Das obige Programm wird leicht abgewandelt:

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

int main(void) {
   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;
}

Abbildung 8.8 Programmablaufplan zur »switch«-Fallunterscheidung

Geben Sie in diesem Programm beispielsweise den Wert 4 für die Variable a ein, so trifft sowohl der Fall case 4 als auch case 5 zu, weil bei der Fallunterscheidung case 4 das break nach der printf()-Ausgabe weggelassen wurde. Ebenso würde sich das Programm verhalten, wenn Sie den Wert 1 eingegeben hätten.


Galileo Computing - Zum Seitenanfang

8.7.1 default topZur vorigen Überschrift

Jetzt stellt sich die Frage, was geschieht, wenn Sie einen anderen Wert als 1 bis 5 eingeben. Das Programm einfach ohne eine Meldung zu beenden, ist unschön, denn auch bei falschen Werten sollte eine Reaktion erfolgen. Dafür gibt es das Schlüsselwort default. Testen Sie es gleich in einem Programm:

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

int main(void) {
   int a,b;
   char opera;
   printf("Grundrechenarten \n");
   printf(" (zahl)(Operator)(zahl) ohne Leerzeichen \n");

   printf("Rechnung bitte eingeben : ");
   scanf("%d%c%d", &a, &opera, &b); /* Bsp.: 10+12 */

   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? kein Rechenoperator \n", opera);
      }      /* Ende switch */
 return 0;
}

Jetzt haben Sie auch gesehen, wie es möglich ist, jedes beliebige darstellbare ASCII-Zeichen mit case zu überprüfen. Einzelne Zeichen werden – wie beim Programm mit den Operatoren eben verwendet – zwischen einzelne Hochkommata gestellt.

Natürlich wäre es auch denkbar, statt

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

eben

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

zu verwenden, da ja das Zeichen '+' den dezimalen Wert 43 hat (siehe ASCII-Tabelle). Sie könnten auch die Oktalzahl 053 oder die Hexzahl 2B verwenden. Hier ist die Schreibweise für die Hexzahl von '+':

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

Im Programm haben Sie gesehen, wie default verwendet wurde:

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

Falls Sie keine gültigen Rechenoperatoren eingegeben haben, bekommen Sie eine entsprechende Meldung.

default bedeutet hier: Falls eine passende case-Verzweigung fehlt, nimm immer das Folgende. Wenn also keine case-Anweisung greift, dann wird der Code-Block nach default ausgeführt (man spricht oft vom sogenannten Default-Verhalten, wenn der default-Block ausgeführt wird). Sie werden in einem späteren Abschnitt (8.9) noch sehen, dass sich die switch-Verzweigung hervorragend für den Aufbau eines einfachen Menüs in einer Konsolenanwendung eignet.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in C++






 Einstieg in C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: C/C++






 C/C++


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Coding for Fun







 Coding for Fun 


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de