Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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 - FOR ... NEXT

Referenz-Navigation

 

Syntax:

FOR Variable [AS Typ] = Start TO Ende [STEP Schrittweite]
  ' Programmcode
NEXT [Variable]

Typ: Anweisung
Kategorie: Programmablauf

Die FOR-Schleife wiederholt den Codeblock zwischen FOR und NEXT, wobei eine Variable bei jedem Durchlauf um einen bestimmten Wert erhöht wird.

'Start' und 'Ende' werden zu Beginn der Schleife intern gespeichert und können innerhalb der Schleife nicht mehr geändert werden. Werden für 'Start' bzw. 'Ende' Variablen verwendet, dann können diese Variablen zwar in der Schleife geändert werden, dies beeinflusst jedoch nicht mehr den Start- bzw. Endwert der Schleife.

Achtung: Bei Ganzzahl-Datentypen ist es nicht möglich, bis zum höchstmöglichen Wert zu zählen (oder bis zum tiefstmöglichen bei negativer Schrittweite), da die Schleife nur verlassen wird, wenn die Zählvariable den Endwert überschreitet. Das tritt in diesem Fall jedoch nie ein. Wird beispielsweise versucht eine UBYTE-Variable von 0 bis 255 zählen zu lassen, wird die Schleife erst verlassen, wenn die Variable den Wert 256 oder höher erreicht. Den Wert 256 kann die UBYTE-Variable jedoch nicht speichern. Stattdessen wird sie nach 255 auf 0 zurückgesetzt und die Schleife läuft weiter.

Wenn Sie für 'Variable' einen Ganzzahlentyp und für 'Schrittweite' eine Fließkommazahl verwenden, dann wird 'Schrittweite' zuvor auf eine Ganzzahl gerundet. Ist 'Schrittweite' kleiner oder gleich 0.5, dann wird sie auf 0 abgerundet und damit eine Endlosschleife erzeugt.
Ist 'Schrittweite' positiv und 'Start' größer als 'Ende', dann wird die Schleife nicht durchlaufen. Dasselbe gilt für eine negative 'Schrittweite', wenn 'Start' kleiner ist als 'Ende'.

Als Block-Anweisung initialisiert die FOR-Schleife einen BefehlsreferenzeintragSCOPE-Block, der mit der Zeile NEXT endet. Wird die Zählvariable mit 'AS Typ' neu dimensioniert, dann ist sie ebenfalls außerhalb der Schleife nicht mehr gültig.

Eine FOR-Schleife kann 'manuell' mit der Anweisung BefehlsreferenzeintragEXIT FOR abgebrochen werden. Taucht innerhalb des Schleifen-Codes die Anweisung BefehlsreferenzeintragCONTINUE FOR auf, so ignoriert FreeBASIC den Code bis zum nächsten NEXT und springt zurück zur FOR-Zeile. Die Zählvariable wird dabei um 'Schrittweite' erhöht.

FOR, STEP und NEXT können mithilfe von BefehlsreferenzeintragOPERATOR überladen werden. Zum Einsatz von UDTs als Zählvariable siehe den Tutorial-Beitrag zum Überladen von Iteratoren.

Beispiel 1: gibt ein Dreieck aus Sternen aus

DIM AS INTEGER i, hoehe
hoehe = 10
FOR i = 1 TO hoehe
  PRINT STRING(i, "*")
NEXT
PRINT "Nach der Schleife hat i den Wert "; i
SLEEP

Ausgabe:

*
**
***
****
*****
******
*******
********
*********
**********
Nach der Schleife hat i den Wert 11

Erläuterung zu Beispiel 1: Nach dem zehnten Durchlauf wird die Zählvariable ein weiteres Mal erhöht und ihr Wert anhand der Schleifenbedingung überprüft. Da sie nun den Wert 11 besitzt, wird die Schleife verlassen.

Beispiel 2: Zählschleife mit automatischer Initialisierung

DIM i AS INTEGER = 1357
PRINT "Wert von i vor der Schleife: "; i

PRINT "Zähle von 3 bis 0 in Schritten von -0.2:"
FOR i AS SINGLE = 3 TO 0 STEP -0.2
  PRINT "i = "; i
NEXT

PRINT "Wert von i nach der Schleife: "; i
SLEEP

Erläuterung zu Beispiel 2: Nach Beendigung der Schleife wird die Zählvariable zerstört; die außerhalb der Schleife deklarierte Variable existiert weiterhin und es kann nun wieder auf sie zugegriffen werden.
Beachten Sie in diesem Beispiel auch die auftretenden Rundungsungenauigkeiten. Es ist besser, Zählvariablen vom Typ INTEGER einzusetzen und diese ggf. innerhalb der Schleife umzurechnen.

FOR in Prozeduren kann nicht mit Variablen als Zähler verwendet werden, die BefehlsreferenzeintragBYREF übergeben wurden. Das liegt daran, dass bei BYREF intern ein Pointer übergeben wird und dieser nicht als Zählvariable eingesetzt werden kann.

Beispiel 3: ergibt einen Compilier-Fehler

DECLARE SUB foo (BYREF a As Integer)

DIM a AS INTEGER
foo a
SLEEP

SUB foo(BYREF a AS INTEGER)
  FOR a = 1 TO 100
  NEXT a
END SUB

Alternativ kann in der Prozedur eine neue Variable angelegt werden:

SUB foo (BYREF a AS INTEGER)
   DIM b AS INTEGER = a
   FOR b = 1 TO 100
   NEXT
   a = b
END SUB

Die hinter NEXT angegebene (optionale) Variable muss mit der bei FOR angegebenen Zählvariablen übereinstimmen. Es ist auch möglich, mehrere Zählvariablen hintereinander anzugeben, um mehrere FOR-Schleifen gleichzeitig abzuschließen.

Beispiel 4:

FOR i AS INTEGER = 1 TO 3 : FOR k AS INTEGER = 7 TO 9
  PRINT i, k
NEXT k, i
SLEEP

Unterschiede zu QB:

Unterschiede zu früheren Versionen von FreeBASIC:

Unterschiede unter den FB-Dialektformen:

Siehe auch:
BefehlsreferenzeintragDO...LOOP, BefehlsreferenzeintragWHILE...WEND, BefehlsreferenzeintragCONTINUE, BefehlsreferenzeintragSCOPE, BefehlsreferenzeintragEXIT, BefehlsreferenzeintragSchleifen


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