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

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 10 Kontrollstrukturen
  gp 10.1 Verzweigungen mit der if-Bedingung
    gp 10.1.1 Anweisungsblock
  gp 10.2 Die Verzweigung mit else if
  gp 10.3 Die Verzweigung mit else
  gp 10.4 Der !-Operator (logischer Operator)
  gp 10.5 Logisches UND (&&) – Logisches ODER (||)
  gp 10.6 Bedingungsoperator ?:
  gp 10.7 Fallunterscheidung: die switch-Verzweigung
    gp 10.7.1 default
  gp 10.8 Die while-Schleife
    gp 10.8.1 Endlosschleife (while)
    gp 10.8.2 Fehlervermeidung bei while-Schleifen
  gp 10.9 Die do while-Schleife
  gp 10.10 Die for-Schleife
    gp 10.10.1 Beispiele für eine for-Schleife
  gp 10.11 Kontrollierte Sprünge
    gp 10.11.1 continue
    gp 10.11.2 break
  gp 10.12 Direkte Sprünge mit goto
  gp 10.13 Notationsstil
    gp 10.13.1 K&R-Stil
    gp 10.13.2 Whitesmith-Stil
    gp 10.13.3 Allman-Stil
    gp 10.13.4 GNU EMACS-Stil
    gp 10.13.5 Der Stil des Autors ;) (K&R-like)


Galileo Computing - Zum Seitenanfang

10.3 Die Verzweigung mit else  toptop

Eigentlich hätten Sie sich im vorangegangenen Programmbeispiel folgende Bedingung sparen können:

else if(alter == 18)

Denn wenn die Variable alter nicht größer als 18 und auch nicht kleiner als 18 ist, kann diese nur noch gleich 18 sein. Um sich eine solche Bedingung zu ersparen, gibt es die else-Verzweigung, was soviel heißt wie Ansonsten nimm mich oder Andernfalls tue das Folgende:

Sie könnten also die Zeile else if(alter == 18) ersetzen durch:

   else {
      printf("Den Führerschein schon bestanden?\n");
   }

Die Syntax der if else-Verzweigung sieht folgendermaßen aus:

if(BEDINGUNG == wahr) {
   Anweisung1;
}
else {
   Anweisung2;
}

Sehen Sie sich hierzu auch den Programmablaufplan an:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 10.4   Programmablaufplan mit else


Merke   else folgt immer einem vorausgehenden if oder else if.


Umgeschrieben sieht das Listing jetzt wie folgt aus:

/* if4.c */
#include <stdio.h>
int main(void) {
   unsigned int alter;
   printf("Wie alt sind Sie: ");
   scanf("%d", &alter);
   if(alter < 18) {
      printf("Sie sind noch nicht volljährig\n");
   }
   else if(alter > 18) {
      printf("Sie sind volljährig\n");
   }
   else {
      printf("Den Führerschein schon bestanden?\n");
   }
   printf("Bye\n");
   return 0;
}

Jetzt haben Sie die einzelnen Bedingungen im Programm optimal gestellt. Wird z.B. für das Alter der Wert 16 eingegeben, führt das Programm den entsprechenden Anweisungsblock aus. Danach folgen keine weiteren Überprüfungen. Wird hingegen für das Alter der Wert 20 genannt, ersparen Sie sich wenigstens die letzte Überprüfung, ob das Alter gleich 18 ist, und entsprechender Anweisungsblock wird ausgeführt. Trifft keine dieser Bedingungen zu, wird der else-Anweisungsblock ausgeführt. Für das bessere Verständnis ein Programmablaufplan zu diesem Listing:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 10.5   Programmablaufplan zum Listing

Ein häufig gemachter Fehler ist es, hinter eine Bedingungsanweisung ein Semikolon zu setzen:

   else if(alter > 18);   //Fehler (das Semikolon)
      {
         printf("Sie sind volljährig\n");
      }

Der Compiler wird Ihnen in solchen Fällen dahingehend eine Fehlermeldung ausgeben, dass else hier fehl am Platz ist. Denn einer else-Verzweigung muss immer ein if bzw. else if vorausgehen. Sie können probeweise im Listing hinter der else-Verzweigung ein Semikolon setzen. Das Programm wird dann immer ausgeben, dass die Variable gleich 18 ist. Dies wird zusätzlich ausgegeben, auch wenn eine der vorangegangenen Bedingungen bereits wahr gewesen ist.

Es ist auch möglich, mehrere Anweisungen bzw. Anweisungsblöcke ineinander zu verschachteln. Das heißt, eine Anweisung mit Anweisungsblock steht innerhalb einer Anweisung mit Anweisungsblock. Ein Beispiel:

/* if5.c */
#include <stdio.h>
int main(void) {
   unsigned int alter;
   printf("Wie alt sind Sie: ");
   scanf("%d", &alter);
   if(alter <= 18) {
      if(alter == 18) {
         printf("Den Führerschein schon bestanden?\n");
      }
      else {
         printf("Sie sind noch nicht volljährig\n");
      }
   }
   else {
      printf("Sie sind volljährig\n");
   }
   printf("Bye\n");
   return 0;
}

Das Listing bewirkt das Gleiche wie schon das Beispiel zuvor. Mit der Anweisung

if(alter <= 18)

wird überprüft, ob alter kleiner oder gleich 18 ist. Sollte das der Fall sein, verzweigt das Programm weiter in den Anweisungsblock mit der Abfrage, ob alter gleich 18 ist. Wenn nicht, ist alter kleiner als 18. Sollte die Zahl aber größer als 18 sein, geht es gleich zur else-Verzweigung.

Wie Sie die Anweisungsblöcke anordnen, bleibt Ihnen letztlich selbst überlassen. Sehen Sie sich dennoch einmal folgendes (Negativ-)Beispiel an:

/* if6.c */
#include <stdio.h>
int main(void) {
   unsigned int alter;
   printf("Wie alt sind Sie: ");
   scanf("%d", &alter);
   if(alter <= 18){
   if(alter == 18){
   printf("Den Führerschein schon bestanden?\n");}
   else{
        printf("Sie sind noch nicht volljährig\n");
       }}
   else{printf("Sie sind volljährig\n");}
   printf("Bye\n");
   return 0;
}

Das Programm ist zwar nicht falsch, aber dennoch etwas unübersichtlich.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
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