Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - DO ... LOOP

Referenz-Navigation

 

Syntax A:

DO [{UNTIL | WHILE} Bedingung]
   ' Programmcode
LOOP

Syntax B:

DO
   ' Programmcode
LOOP [{UNTIL | WHILE} Bedingung]

Typ: Anweisung
Kategorie: Programmablauf

Die DO-Schleife wiederholt einen Anweisungsblock, während bzw. bis eine Bedingung erfüllt ist. Wird keine Bedingung angegeben, so wird eine Endlosschleife erzeugt. Der Programmierer muss dann über Anweisungen wie BefehlsreferenzeintragEXIT selbst dafür sorgen, dass die Schleife wieder verlassen wird.

Bedingung ist ein numerischer Ausdruck, der entweder wahr/erfüllt (ungleich null) oder falsch/nicht erfüllt (gleich null) sein kann. Wird das Schlüsselwort UNTIL eingesetzt, so führt FreeBASIC die Schleife aus, bis (until) die Bedingung erfüllt ist, d.h. bis der Ausdruck einen Wert ungleich null annimmt. Wird das Schlüsselwort WHILE eingesetzt, so führt FreeBASIC die Schleife aus, solange (while) die Bedingung erfüllt ist, d.h. bis der Ausdruck gleich null ist.

Als Block-Anweisung initialisiert DO...LOOP einen BefehlsreferenzeintragSCOPE-Block, der mit der LOOP-Zeile endet. Variablen, die innerhalb einer solchen Schleife deklariert werden, existieren außerhalb nicht mehr.
Achtung: Eine innerhalb der DO-Schleife deklarierte Variable kann auch nicht in 'Bedingung' zur Überprüfung des Schleifenendes verwendet werden werden, da sie an dieser Stelle bereits nicht mehr existiert!

Taucht innerhalb des Schleifen-Codes die Anweisung BefehlsreferenzeintragCONTINUE DO auf, so ignoriert FreeBASIC den Code bis zum nächsten LOOP, prüft dort, ob die Bedingung (sofern angegeben) erfüllt wurde, und springt gegebenenfalls zurück zur DO-Zeile.

In Syntax A wird die Bedingung bereits geprüft, bevor die Schleife 'betreten' wird. Bewirkt der Wert der Bedingung dann ein Ende der Schleife, so wird der Schleifencode übersprungen. Bei Syntax B wird der Wert der Bedingung erst geprüft, wenn der Schleifencode schon einmal durchlaufen wurde. Die Schleife wird also auf jeden Fall mindestens einmal durchlaufen.

DO...LOOP-Blöcke können bis zu beliebiger Ebene ineinander und mit anderen Schleifen verschachtelt werden.

Beispiel 1: Endlosschleife mit CONTINUE und EXIT

Dim As Integer n = 1
Dim As Integer gerade = 0

Do
  n += 1
  If n > 10 Then Exit Do
  If n Mod 2 Then Continue Do
  gerade += 1
Loop
Print "Anzahl gerader Zahlen: "; gerade
Sleep

Beispiel 2: Datei zeilenweise auslesen

DIM f AS INTEGER = FREEFILE, zeile AS STRING
IF OPEN("datei.ext" FOR INPUT AS #f) = 0 THEN
  ' Datei existiert und wird ausgelesen
  DO UNTIL EOF(f)  ' bis Dateiende erreicht wurde
    LINE INPUT #f, zeile
    PRINT zeile
  LOOP
  CLOSE #f
ELSE
  PRINT "Datei konnte nicht geöffnet werden!"
END IF
SLEEP

Unterschiede zu QB:
Innerhalb einer Schleife dürfen in QB keine Variablen definiert werden.

Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.16 wirkt eine DO-LOOP-Schleife wie ein SCOPE-Block.

Unterschiede unter den FB-Dialektformen:

Siehe auch:
BefehlsreferenzeintragWHILE ... WEND, BefehlsreferenzeintragFOR ... NEXT, BefehlsreferenzeintragEXIT, BefehlsreferenzeintragCONTINUE, BefehlsreferenzeintragSCOPE, BefehlsreferenzeintragBedingungsstrukturen, BefehlsreferenzeintragSchleifen


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 21.07.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 27.12.2012 von Redakteurnemored gespeichert.
  Versionen Versionen