do while - Schleife

Gast #635118
Lesenswert?

Moin !

Eine Frage zu einer do - while Schleife:

do
{ .. Anweisung 1 .. }

while();
{ .. Anweisung 2 .. }

Es geht dabei um den while - Rumpf. Falls die Bedingung positiv ist, 
würde die while Schleife die Klammer wo die 2 drin steht dann ausführen?

Ich bin mir nicht ganz sicher, da hinter der while Schleife eine 
Semikolon steht.

Was würde passieren ?


Gruss Nils
#635150
Lesenswert?

Nils Terz wrote:
> Ok...damit komme ich schon mal weiter.
>
> Die Aussage, das der zweite Teil hinter der Anweisung nicht ausgeführt
> reicht  mir ! Well done!
Stimmt doch gar nicht. Der Teil mit "Anweisung 2" wird in jedem Fall 
ausgeführt. Er ist schließlich nicht Teil einer bedingten Ausführung. 
Hat ja auch nichts mit der do...while-Schleife zu tun. Das Semikolon 
beendet die do...while-Schleife. Da die Bedingung des while leer ist, 
wird Anweisung 1 genau einmal ausgeführt.
Persönliche Seite #635193
Lesenswert?

Hallo Nils ;)

In C bestehen Schleifen aus einem Kopf und einem Rumpf. Die erste 
Schleife ist eine abweisende Form, die zweite nicht. Das liegt daran 
dass bei der zweiten Variante der Schleifenrumpf immer mind. einmal 
ausgefuehrt wird, da die Abbruchsbedingung nach dem ersten Durchlauf das 
erste mal evaluiert wird.

1) while ( HEAD_EXPR ) {  }

2) do {  } while ( HEAD_EXPR )

Die Magie mit dem Semikolon ist folgende: In C ist das Semikolon ";" 
eine leere Anweisung. Die Schleife erwartet genau eine Anweisung nach 
ihrem Kopf. Dies kann nun eine Anweisung sein wie etwa

while (1) do_something();

oder es ist eben ein Block (wie oben). Der Block fasst mehrere 
Anweisungen zu einer zusammen und wird auch so behandelt. Wenn Du eine 
Endlosschleife wie z.B.

while (1);

schreibst ist das auch valide.

Schreibst Du nun

while (1); { /* ... */ }

Dann ist der Block nicht mehr Teil der Schleife und wird daher immer 
ausgefuehrt.

Ich hoffe ich habe die letzten Klarheiten beseitigt ;)

Alles Gute,
Michael
#635208
Lesenswert?

Willivonbienemaya .. wrote:
>> while (1); { /* ... */ }
>>
>> Dann ist der Block nicht mehr Teil der Schleife und wird daher immer
>> ausgefuehrt.
>
> Ne, der Block wird hier nie ausgeführt. Wie soll das Programm denn dahin
> kommen?
Richtig. Wenn die Bedingung immer wahr ist, wird der Block nie 
ausgeführt. Oben ist die Bedingung allerdings leer, so dass der Block 
tatsächlich immer ausgeführt wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren