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
> 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
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
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
Warum meckert der Compiler eigentlich nicht, wenn man eine geschweifte Klammer mit einer Anweisung hinter der while Schleife schreibt? Siehe meinem ersten Beitrag !
weil du damit nur einen block machst ... die while ist nach dem ; abgeschlossen .... warum sollte er denn da meckern ?
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.
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.
Deine Anweisung 2 hat nichts mehr mit der do-while zu tun. Sie wird ausgeführt, wenn die Schleife verlassen wird.
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
> 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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.