Berndt Wischnewski | Richard-Wagner-Str. 49 | 10585 Berlin | ||
Tel.: 030 - 3429075 | FAX : 030 34704037 | email: webmaster@peacesoftware.de | Ust-ID: DE135577379 |
C Kurs - Schleifen - while Schleife: machs mir solange bis der Arzt kommt
Es ist ja schon ganz nett, wenn man einen Teil des Programnes für eine bestimmte Anzahl von Durchgängen wiederholen kann. Was jedoch wenn man die Anzahl der Durchgänge gar nicht kennt? Ein typisches Beispiel ist die Verabeitung eines Wortes, eingegeben durch den Benutzer oder gelesen aus einer Datei. Die Länge des Wortes, Anzahl der Buchstaben kann das Programm leider nicht voraussehen. Die Lösung dieses Problems ist die while Schleife, die solange läuft, bis das Abbruchkriterium erfüllt wird. Man kann sich eine while Schleife wie eine for Schleife vorstellen, die nur aus dem Abbruchkriterium besteht. Die generelle Form der while Schleife ist:
Am besten erst eimal ein Beispiel:
ergibt folgenden output:
Die while Schleife läuft solange wie die Bedingung im Schleifenkopf wahr ist, und bricht dann ab, wenn diese falsch wird. Um Zählvariablen, in unserem Beispiel i, muß man sich selber kümmern. Was passiert nun, wenn die Schleifenbedingung von vorne herein falsch ist? Nun gar nichts, die while Schleife wird einfach übersprungen. Hier ein Beispiel:
ergibt folgenden output:
Diskussion: Fast immer lassen sich while Schleifen in for Schleifen überführen, in unserem Beispiel kann man, wenn man die Länge des strings schon kennt, sie ist x, genausogut schreiben:
Welche Schleife man nun nimmt, for oder while, sollte man mit etwas Fingespitzengefühl auswählen. Wenn man das Gefühl hat, die Abbruchkriterien der Schleife sind eher unbestimmt, sollte man nicht lange nachdenken um diese zu berechnen, sonder eine while Schleife programmieren. Wenn man andersrum meint, alle Laufbedingungen der Schleife zu kennen, nimmt man am besten eine for Schleife. Eleganter kann man die while Schleife auch so kodieren, in dem man eine Funktion in den Schleifenkopf einfügt, in unserem Beispiel etwa so:
Hier kann man nun fragen, ob bei jedem Schleifendurchlauf die Funktion strlen(...) aufgerufen wird, und dass das Programm dadurch langsamer wird, so steht es schließlich im Programmkode. Die Antwort ist, im Prinzip nein, aber... alle C Compiler die ich kenne optimieren solche Konstruktionen dahingehend, dass wenn möglich die Funktion nur einmal ausgeführt wird. Ich kenne aber nicht alle C Compiler, außerdem kann man Compileroptimierungen auch abschalten. Und wenn man sich Mühe gibt, kann man die Funktion so komplex gestalten, dass es der Compiler nicht mehr schafft, eine optimale Ausführung zu generieren.
Die generelle Form der do-while Schleife ist:
Hier kommt auch schon ein Beispiel:
|
Wie man besser nicht programmiert, Fehler sucht und findet: |