C++-Programmierung/ Einführung in C++/ Auswahl
C++-Programmierung/ Vorlage:Navigation
Verzweigungen kennen Sie schon, daher sollte es Ihnen nicht schwer fallen, ein Programm zu schreiben, welches abfragt, welche der verschiedenen, in der Überschrift benannten Leckereien, Sie am liebsten mögen. Das ganze könnte etwa so aussehen:
C++-Programmierung/ Vorlage:Code
Das funktioniert natürlich, aber finden Sie nicht auch, dass der (Schreib-)Aufwand ein wenig zu groß ist? Außerdem ist diese Schreibweise nicht gerade sofort einleuchtend. Für unseren Fall, wäre es schöner, wenn wir die Variable Vorlage:Cpp als zu untersuchendes Objekt festlegen könnten und dann einfach alle Fälle die uns interessieren durchgehen könnten. Praktischerweise bietet C++ ein Schlüsselwort, das genau dies ermöglicht.
Eine Vorlage:Cpp-Anweisung hat die folgende Form:
C++-Programmierung/ Vorlage:Syntax
Auf unser Beispiel angewandt, würde das dann so aussehen:
C++-Programmierung/ Vorlage:Code
Nun ja, Sie haben ein neues Schlüsselwort kennen gelernt, setzen es ein und kommen damit auch prompt zum falschen Ergebnis. Sieht so aus, als würde jetzt jeder der Sätze ab dem Ausgewählten ausgegeben. In der Tat handelt Vorlage:Cpp genau so. Es führt alle Anweisungen, ab dem Punkt aus, an dem das Vorlage:Cpp-Argument mit der übergebenen Variable (in unserem Fall Vorlage:Cpp) übereinstimmt. Um das Ausführen nachfolgender Anweisungen innerhalb von Vorlage:Cpp zu verhindern, benutzen Sie das Schlüsselwort Vorlage:Cpp. Unser Beispiel sieht dann also folgendermaßen aus:
C++-Programmierung/ Vorlage:Code
Nun haben Sie wieder das ursprüngliche, gewünschte Verhalten. Was Sie noch nicht haben, ist eine Erklärung, warum extra ein Vorlage:Cpp aufgerufen werden muss, um das Ausführen folgender Vorlage:Cpp-Zweige zu unterbinden. Aber das werden Sie gleich erfahren.
Nur Ganzzahlen
Wie bereits aus der oben stehenden Syntaxangabe hervorgeht, kann Vorlage:Cpp nur mit C++-Programmierung/ Vorlage:Buchinterner Link benutzt werden. Dies hängt damit zusammen, dass Vorlage:Cpp ausschließlich auf Gleichheit mit einem der Vorlage:Cpp-Zweige vergleicht. Bei Vorlage:Cpp-Werten (mit der üblichen Größe von 4 Byte) ist das noch eine „überschaubare“ Menge von maximal 4.294.967.296 () Vorlage:Cpp-Zweigen. Ein Vorlage:Cpp kann die gleiche Menge unterschiedlicher Zahlen darstellen, sofern er ebenfalls 4 Byte groß ist. Aber versuchen Sie mal einen genauen Vorlage:Cpp-Wert aufzuschreiben. Sie arbeiten also immer mit Näherungen, wenn Sie Gleitkommazahlen in Ihrem Code benutzen. Ihr Compiler regelt das für Sie, er weist der Gleitkommazahl den zu Ihrem Wert am nächsten liegenden, darstellbaren Wert zu. Deshalb ist es so gut wie nie sinnvoll (aber natürlich trotzdem möglich), einen Test auf Gleichheit für Gleitkommazahlen durchzuführen. Bei Vorlage:Cpp wurde das jedoch unterbunden.
Zeichen und mehrere Vorlage:Cpp-Zweige
Eine Vorlage:Cpp-Anweisung trifft Ihre Entscheidung hingegen, anhand der Tatsache ob eine Bedingung erfüllt ist, oder nicht. Für die Vorlage:Cpp-Anweisung gibt es also nur zwei Möglichkeiten. Allerdings gibt es eine ganze Menge von Möglichkeiten, wie der Zustand Vorlage:Cpp, oder Vorlage:Cpp erreicht werden kann. Die Rede ist von Vergleichen und Verknüpfungen ( wie Vorlage:Cpp (= und) oder Vorlage:Cpp (= oder) ) und der Umwandlung von anderen Datentypen nach Vorlage:Cpp, oder Vorlage:Cpp. Für ganzzahlige Datentypen gilt etwa, dass jeder Wert ungleich 0 Vorlage:Cpp ergibt, aber 0 hingegen wird als Vorlage:Cpp ausgewertet. Für eine genaue Beschreibung dessen, was hier noch mal kurz umrissen wurde, sehen Sie sich das C++-Programmierung/ Vorlage:Buchinterner Link an.
Also gut, Vorlage:Cpp kann nur auf Gleichheit testen und erlaubt auch keine Verknüpfungen. Oder sagen wir besser: fast keine. Denn genau deshalb gibt es diese scheinbar aufwendige Regelung mit dem Vorlage:Cpp. Das folgende Beispiel demonstriert die Verwendung von Zeichen und die Anwendung von mehreren Vorlage:Cpp-Zweigen, die den gleichen Code ausführen (was einer Verknüpfung mit Vorlage:Cpp zwischen mehreren Vergleichen mittels Vorlage:Cpp gleichkommt):
C++-Programmierung/ Vorlage:Code
Dieses Programm benutzt die Anfangsbuchstaben anstatt der bisherigen Durchnummerierung für die Auswahl. Außerdem ist es möglich sowohl den großen, als auch den kleinen Buchstaben einzugeben. Beides führt den gleichen Code aus.
Missing 'break'
Da Vorlage:Cpp „von oben nach unten“ abgearbeitet wird, benötigt der letzte Fall kein 'break' - dort endet die Switch-Struktur sowieso. Es ist jedoch erlaubt, den 'default'-Fall auch vor einem oder mehreren 'case'-Fällen aufzuführen - dann sollte er ebenso mit einer 'break'-Anweisung enden, wie jeder andere Fall.
Der letzte Fall darf ebenso mit 'break' enden, wie alle anderen - es schadet nicht ;-)