Forum: Mikrocontroller und Digitale Elektronik do while - Schleife


von Nils Terz (Gast)


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

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

> 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?

Nein

von Patrick (Gast)


Lesenswert?


von Michael K. (Gast)


Lesenswert?

Nicht ganz.

eine normale do-while Schleife sieht folgendermassen aus:
1
do 
2
{
3
  Anweisung;
4
  Anweisung;
5
} while (Bedingung)

zum nachlesen:

http://www.geocities.com/learnprogramming123/Clesson8Beginner.htm

Grüße,
Michael

von Nils Terz (Gast)


Lesenswert?

Ok...damit komme ich schon mal weiter.

Die Aussage, das der zweite Teil hinter der Anweisung nicht ausgeführt 
reicht  mir ! Well done!

Gruss Nils

von Nils Terz (Gast)


Lesenswert?

Warum meckert der Compiler eigentlich nicht, wenn man eine
geschweifte Klammer mit einer Anweisung hinter der while Schleife 
schreibt?

Siehe meinem ersten Beitrag !

von Peter P. (bonsaibaum)


Lesenswert?

weil du damit nur einen block machst ... die while ist nach dem ; 
abgeschlossen ....
warum sollte er denn da meckern ?

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Das Programm geht doch dann da weiter.
Klammern darfst du überall benutzten, wenn du dir im Klaren darüber 
bist, dass du damit Blöcke deklarierst.

von Johannes M. (johnny-m)


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.

von Patrick (Gast)


Lesenswert?

Deine Anweisung 2 hat nichts mehr mit der do-while zu tun. Sie wird 
ausgeführt, wenn die Schleife verlassen wird.

von Michael G. (linuxgeek) Benutzerseite


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

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

> 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?

von Johannes M. (johnny-m)


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.

von Nils Terz (Gast)


Lesenswert?

JOU alles klar - jetzt hat es klick gemacht !

Danke Euch !!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.