Unterschied while() und do {} while()

Gast
Nein

Das sind zwei unterschiedliche Schleifenarten. Das eine ist eine
kopfgestuerte Schleife, das andere eine fußgesteuerte Schleife.

Sprich bei

do
{
//Befehl
}while()

hier wird der befehl mindestens ein mal ausgeführt bevor die
Abbruchbedinung abgefragt wird

bei

while()
{
//Befehl
}

kann es sein das der Befehl nie ausgeführt wird.


Grüßle Jochen
Gast
Das ist in der Tat ein Unterschied:

  while (expression) {statement}

ist eine sogenannte "pre-check-loop". Das
Schleifenfortsetzungskriterium wird vor dem Schleifendurchlauf geprüft.
Trifft das Fortsetzungskriterium gleich von Anfang an nicht zu, wird die
Schleife kein einziges Mal durchlaufen.

  do {statement} while (expression)

ist eine "post-check-loop" - die Schleife wird durchlaufen und danach
wird das Schleifenfortsetzungskriterium geprüft.
Somit wird diese Schleife mindestens einmal durchlaufen.

In Struktogrammschreibweise:

  +-----------------+
  | Kriterium       |
  |  +--------------+
  |  |              |
  |  |              |
  +--+--------------+

und

  +--+--------------+
  |  |              |
  |  |              |
  |  +--------------+
  | Kriterium       |
  +-----------------+
Gast
Der von Euch aufgezeigte Unterschied ist einigermaßen klar. Ich meinte
in diesem Falle aber speziell den Einsatz in der avr-libc mit
"loop_until_bit_is_set" oder dem Gegenspieler "_clear". Da SOLLTE
es doch eigentlich egal sein, ob er die Bedingung vor oder nach der
expression prüft. Da liegt mein "Problem", da ich mittlerweile bei
vielen Sachen in C einen "tieferen Sinn" zu übersehen fürchte. Und
einmal falsch gelernt läßt sich ja bekanntlich schwer wieder
korrigieren...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.