ein Kapitel zurück                                           ein Kapitel weiter

Nun kommen wir zu den Schleifen. In diesem Kapitel nehmen wir eine Schleife mit Ein- und Austrittsbedienung durch. Das Grundgerüst der Schleifenbedienung while sieht folgendermaßen aus...

while(Bedienung==wahr)
{
  /*Abarbeiten von Befehlen bis Bedienung ungleich wahr*/
}


Ist die Bedienung die in den Klammern von while steht wahr, so wird der Anweisungsblock hinter den Klammern ausgeführt und zwar solange bzw. so oft bis die Bedienung in den Klammern falsch bzw. unwahr ist. Hierzu wieder ein Programmablaufplan...

while PAP


Dazu ein kleines Programmbeispiel...

/*Download:while1.c*/
#include <stdio.h>

int main()
{
int zahl=1, tmp=0;

while(zahl<=10)
{
tmp=tmp+zahl;
zahl++; /*Zahl + 1*/
}
printf("Die Summe aus 1+2+3...+9+10= %d\n",tmp);

return 0;
}

Unser Programm führt die while - Schleife solange aus wie die 'zahl' kleiner oder gleich 10 ist. Hier ein kurzer Durchgang des Programms Schritt für Schritt...

while(zahl<=10)

Ist unsere Zahl kleiner oder gleich 10?! Unser 'zahl' ist 1, also springen wir in den Anweisungsblock. Hier wird als erstes die Addition : tmp=tmp+zahl durchgeführt. Somit ist der Wert von 'tmp' 1. Jetzt wird noch unsere Variable zahl um 1 erhöht (zahl++). Nun ist der while - Anweisungsblock wieder zu Ende und das Programm springt wieder zum Anfang der while - Abfrage (logisch oder sonst wäre es ja keine Schleife). Nun erfolgt wieder die Überprüfung ob unsere Zahl immer noch kleiner oder gleich 10 ist. Da unsere Zahl ja jetzt denn Wert 2 hat geht´s erneut in den Anweisungsblock weiter wie zuvor. Die Schleife wird solange Wiederholt bis die 'zahl' den Wert 11 erreicht hat. Denn dann ist die Bedienung ob die 'zahl' kleiner oder gleich 10 ist falsch und das Programm läuft nach dem Anweisungsblock von while weiter und gibt das Ergebnis 55 aus.

Endlosschleife

/*Download:while2.c*/
#include <stdio.h>

int main()
{
char quit;

while(1)
{
printf("\nAus dieser Schleife geht raus mit 'q'und <ENTER>\n");
printf("Eingabe > ");
scanf("%c",&quit);
fflush(stdin); /*Damit nur ein Zeichen eingelesen wird*/

if(quit == 'q')
break;
}
printf("Geschafft, sie sind drausen!!\n");

return 0;
}

Die Zeile....

while(1)

stellt eine Endlosschleife dar. Da die Bedienung das der Inhalt dieser Schleife 1 ist immer wahr ist. Sie könnten dort jede x-beliebige Zahl außer 0 einsetzen. Aber wir haben in den Vorherigen Kapiteln gelernt das 1 für wahr und 0 für unwahr steht. Nun werden sie solange genervt bis sie den Buchstaben 'q' eingegeben haben. Dann bricht die Schleife mit...

if(quit == 'q')
     break;


....break ab. Aber seien sie vorsichtig mit Schleifen, denn sollten sie falsche Bedienungen stellen kommt das Programm nicht mehr von selbst aus der Schleife. Meist hilft dann nur noch eine Tastenkombination wie <Ctrl>+<C> oder <Ctrl>+<Alt>+<Del>. Wenn gar nichts mehr geht dann hilft oft nur noch ein brutaler Shutdown. Deswegen wenn sie Üben seien sie sicher das sie alles gespeichert haben (dies gilt insbesondere für MS Windows). Dies gilt übrigens für alle Schleifenprogramme die sie programmieren werden.

Ein gefährlicher Nebeneffekt der in Schleifen oftmals auftritt, ist die Überprüfung auf Gleichheit bei Berechnungen...

/*Download:while3.c*/
#include <stdio.h>

int main()
{
int wert=2;
while(wert==20)
{
wert=*wert;
printf("%d\n",wert);
}
return 0;
}

In diesem Beispiel wird die Überprüfung in der while - Bedienung niemals wahr werden, da der Wert 20 nie extakt erreicht wird. Wir haben somit eine Endlosschleife. Sicherer ist in einem solchem Fall die Überprüfung folgendermaßen durchzuführen...

while(wert<=20)

Ein weiterer Nebeneffekt der in Schleifen auftreten kann, ist bei Verwendung logischer Operatoren wie der || (ODER) - Operator....

/*Download:while4.c*/
#include <stdio.h>

int main()
{
int zahl1=1;
int zahl2=1;

while(zahl1 <= 3 || zahl2 <=3)
{
printf("%d %d\n",zahl1, zahl2);
zahl1++;
zahl2++
}
return 0;
}

In diesem Beispiel wird zuerst der Wert von zahl1 bis 3 hochgezählt und anschließend der Wert von zahl2. Gleichzeitig wird der Wert von zahl1 weiter hochgezählt.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf