ein Kapitel zurück                                           ein Kapitel weiter

Die Schleife 'do...while' ist ähnlich wie unsere 'while' - Schleife die wir eben kennen gelernt haben, nur das die Bedienung nach dem Anweisungsblock überprüft wird.

do {
       ..................
       /*Programmablauf*/
       ..................
      }while(Bedienung==wahr);


Unser Anweisungsblock wird mit dem Wort 'do' eingeleitet, im Anweisungsblock wird dann irgendetwas ausgeführt. Am Ende des Anweisungsblocks steht dann unser bekanntes 'while' und überprüft ob die Bedienung wahr ist die wir im Anweisungsblock ausgeführt haben. Ist die Bedienung wahr wird unser Anweisungsblock erneut ausgeführt und wir beginnen wieder bei 'do'. Wenn die Bedienung unwahr ist geht´s normal weiter nach der 'while' - Bedienung.
Achten sie auch das bei dieser 'do...while' - Schleife am Ende von 'while(bedienung);' mit einem Semikolon abgeschlossen wird!!!!!!!!
Hierzu auch wieder der Programmablaufplan von do...while...

do while PAP


Jetzt ein Programmbeispiel...

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

/*Prototypen*/
void maxzahl(int,int);
void wieweitentf(int,int);

void maxzahl(int rate, int zuf)
{
(rate>zuf) ?wieweitentf(rate,zuf) :wieweitentf(zuf,rate);
}

void wieweitentf(int a, int b)
{
int tmpcount=0;

while(a>b)
{
b++;
tmpcount++;
}

if(tmpcount==1)
printf("Gaaaanz knapp!!!!\n");
else if(tmpcount==2)
printf("Nicht schlecht, ziemlich nah dran!!\n");
else
printf("Spielen sie heute besser nicht Lotto ;)\n");
}


int main(void)
{
int ratezahl,count=0,erraten=0;
int zufall=rand()%10; /*Erzeugt ein Zufallszahl von 1-10*/

do{
printf("Zahleingabe bitte (1-10): ");
scanf("%d",&ratezahl);
if(ratezahl==zufall)
{
erraten=1;
count++;
}
else
{
maxzahl(ratezahl,zufall);
count++;
}
}while(erraten!=1 && count !=3);

if(erraten==0)
{
printf("Sie haben 3 Chancen vertan ;)\n");
printf("Die Zahl wäre %d gewesen!!\n",zufall);
}
else
printf("Wow mit %d Versuche erraten!\n",count);

return 0;
}

Wir haben hier in dem Programm die Headerdatei....

#include<stdlib.h>

...für die Funktion....

rand()%10;

..womit wir eine Zufallszahl zwischen 1 - 10 erzeugen dessen Wert wir an 'int zufall' übergeben. Dies ist aber nur ein Pseudo-Zufallsgenerator! Soviel in kürze zum Zufallsgenerator. Das Thema ist so umfangreich das wir dafür ein extra Kapitel verwenden werden. Unsere do...while - Schleife wird solange ausgeführt bis....

while(erraten!=1 && count !=3);

...die Variablen 'erraten' 1 oder unser Zähler 'count' 3 ist. Unsere while-Schleife in Worten erklärt: Solange die Bedienung wahr ist das 'erraten' ungleich 1 (erraten !=1(Bedeutet:nicht erraten)) UND (&&) 'count' ungleich 4 (count !=4(Bedeutet:Weniger wie 4 Rateversuche)) ist wird der Anweisungsblock von neuem Durchlaufen. Und der Abbruch wird erreicht durch....

if(ratezahl==zufall)

...weil wir dadurch im Anweisungsblock die Variable 'erraten' auf 1 setzen. Auch ein Abbruch wird erreicht durch....

count++;

...wenn der Wert von der Variablen 'count' größer als 3 bzw. gleich 4 ist. Kurze Erklärung zu unserer Funktion......

void maxzahl(int rate, int zuf)

...die dazu dient unserer Funktion...

void wieweitentf(int a, int b)

...den größeren der beiden Wert an den Parameter 'int a' zu übergeben. Damit können wir ganz elegant und schnell mit einer while-Schleife.....

while(a
{
  b++;
  tmpcount++;
}


...herausfinden wie weit wir von der zu erratenden Zahl entfernt sind (tmpcount gibt die Differenz zurück) das wir dann im weiter Verlauf der Funktion mit if - Abfragen überprüfen und dementsprechende Meldungen ausgeben. Mein Tip: Gehen sie das Programm am besten Schritt für Schritt auf einem Blatt Papier durch oder benutzen sie einen Debugger.

do..while eignet sich Prima zum erstellen eines Auswahlmenüs mit switch...

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

int main()
{
int auswahl;

do{
printf("-1- Auswahl1\n");
printf("-2- Auswahl2\n");
printf("-3- Auswahl3\n");
printf("-4- Programmende\n");
printf("\n\nIhre Auswahl : ");
scanf("%d",&auswahl);

switch(auswahl)
{
case 1 : printf("Das war Auswahl 1 \n"); break;
case 2 : printf("Das war Auswahl 2 \n"); break;
case 3 : printf("Das war Auswahl 3 \n"); break;
case 4 : printf("Programmende\n"); break;
default: printf("Unbekannte Auswahl\n");
}
}while(auswahl!=4);
return 0;
}



Aufgabe: Verbessern sie das Programm dowhile.c. Implementieren sie eine weitere do...while - Schleife die die uns abfragt ob wir noch ein Spiel machen wollen oder nicht...

Ein weiterer Versuch (j/n) :

Bei ja spielen wir ein neues Spiel bei Nein beenden wir unser Programm.

Hilfe: Sie benötigen lediglich ein Variable wie 'char jn' und müssen wissen wo sie die 2. do...while - Schleife einfügen. Hier geht's zur Lösung!

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf