Außer der in der vorherigen Lektion beschriebenen for-Schleife gibt es noch die while-Schleife. Während die for-Schleife hauptsächlich dann eingesetzt wird, wenn schon vor dem Eintritt in die Schleife die Abbruchbedingung bekannt ist, so wird die while-Schleife dagegen hauptsächlich eingesetzt, wenn die Abbruchbedingung erst innerhalb der Schleife selbst festgestellt werden kann.
|
|
Und damit es mal wieder nicht gar zu einfach wird gibt es zwei Arten von while-Schleifen:
Bei der while-Schleife wird vor dem Eintritt in die Schleife bereits abgeprüft, ob die Schleife überhaupt durchlaufen werden muss. Sie hat folgende Syntax:
| while (Ausdruck) Aktion; |
Ausdruck kann jeder C++ Ausdruck sein der entweder ein ganzzahliges oder boolsches Ergebnis liefert.
|
|
Der Ausdruck muss immer in Klammern stehen und nach der Klammer folgt (in der Regel) kein Semikolon!
Die auf den Ausdruck folgende Aktion wird nun sooft wiederholt, so lange die Auswertung des Ausdrucks true ergibt. Und auch hier gilt, wie bei der for-Schleife, dass die Aktion standardmäßig nur aus einer Anweisung besteht. Sollen mehrere Anweisungen ausgeführt werden, was der Regelfall wohl ist, so müssen die Anweisungen in einen Block {...} eingeschlossen werden.
|
... // Abbruchkriterium initialisieren bool done = false; // Schleifenbeginn while (!done) { ... // Hier irgend wann done auf auf true setzen ... // damit Schleife beendet wird. } |
|
|
Diese Schleife wird immer mindestens einmal durchlaufen, da das Abbruchkriterium erst am Ende der Schleife abgeprüft wird. Die Schleife besitzt folgende Syntax:
| do Aktion; while (Ausdruck); |
Für den Ausdruck und die Aktion gilt das Gleiche wie bei der vorherigen while-Schleife. Die Aktion besteht ebenfalls standardmäßig aus einer Anweisung, mehrere Anweisungen sind also wieder in einen Block {...} einzuschließen. Und Ausdruck kann wieder jeder beliebige ganzzahlige oder boolsche C++ Ausdruck sein. Die Schleife wird auch hier so lange durchlaufen, so lange die Auswertung des Ausdrucks true ergibt.
|
... // Abbruchkriterium initialisieren bool done = false; do { ... // Hier irgend wann done auf auf true setzen ... // damit Schleife beendet wird. } while (!done); |
|
|
Auch mit while-Schleifen lassen sich Endlos-Schleifen erzeugen, wie die nachfolgenden Beispiele aufzeigen. Als Ausdruck wird hier ganz einfach der Wert true oder eine Ganzzahl-Konstante ungleich 0 eingesetzt.
|
// Endlos while-Schleife while (true) { ... } // Endlos do-while Schleife do { ... } while(1); |
|
![]() 10.1 20.2 30.3 40.4 50.5 60.6 |
|
1. Wert: 10.1 |
|
// Beispiel zur while-Schleife // Zuerst Dateien iostream und iomanip einbinden #include <iostream> #include <fstream> using std::cout; using std::endl; // Konstante für Dateinamen definieren const char* const pFILENAME = "while.dat"; // Variablen definieren double summe; short zaehler; // main() Funktion int main () { // Eingabestream-Objekt definieren und mit Datei verbinden std::ifstream InFile; InFile.open(pFILENAME); // Fehler abfangen! if (!InFile) { cout << "Datei " << pFILENAME << " konnte nicht geöffnet werden!\n"; exit (1); } // Summe und Zähler initialisieren summe = 0.0; zaehler = 0; // Daten aus Datei einlesen bis Dateiende do { // Variable zum Einlesen eines Werts double wert; // Wert einlesen InFile >> wert; // Falls nicht Dateiende erreicht if (!InFile.eof()) { // Wert zur Kontrolle ausgeben und gleichzeitig Zähler erhöhen cout << ++zaehler << ". Wert: " << wert << endl; // Wert aufsummieren summe += wert; } } while (!InFile.eof()); // Bei Dateiende Schleife beenden // Datei wieder schliessen InFile.close(); // Falls Werte eingelesen wurden if (zaehler) // Mittelwert ausgeben cout << "Mittelwert der Zahlen: " << summe/zaehler << endl; else // sonst Meldung ausgeben cout << "Keine Werte eingelesen!\n"; } |
Für eine einmalige Einlage auf einem Sparkonto ist der sich ergebende Kontostand nach jedem Jahr zu berechnen und auszugeben. Der Kontostand ist mit 2 Nachkommastellen auszugeben.
Die einmalige Einlage so wie der Zinssatz (in Prozent) sind über die Tastatur einzulesen.
Danach ist der Kontostand so lange auszugeben, bis sich entweder die Einlage mindestens verdoppelt hat (siehe Ausgabe unten) oder aber 10 Jahre abgelaufen sind.
|
Welcher Betrag soll verzinst werden? 100 |