mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik do while - Schleife


Autor: Nils Terz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz.

eine normale do-while Schleife sieht folgendermassen aus:
do 
{
  Anweisung;
  Anweisung;
} while (Bedingung)

zum nachlesen:

http://www.geocities.com/learnprogramming123/Cless...

Grüße,
Michael

Autor: Nils Terz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nils Terz (Gast)
Datum:

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

Siehe meinem ersten Beitrag !

Autor: Peter P. (bonsaibaum)
Datum:

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

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick (Gast)
Datum:

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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nils Terz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JOU alles klar - jetzt hat es klick gemacht !

Danke Euch !!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.