Referenz - DO ... LOOP
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 EXIT 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 SCOPE-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 CONTINUE 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:
- In der Dialektform -lang qb und -lang fblite sind Variablen, die in einer DO-Schleife dimensioniert werden, in der ganzen Prozedur sichtbar.
- In der Dialektform -lang fb und -lang deprecated sind Variablen, die in einer DO-Schleife dimensioniert wurden, nur innerhalb dieser Schleife gültig.
Siehe auch:
WHILE ... WEND, FOR ... NEXT, EXIT, CONTINUE, SCOPE, Bedingungsstrukturen, Schleifen
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|