REPEAT

Aus C64-Wiki
Zur Navigation springenZur Suche springen
REPEAT
Syntax: REPEAT
Parameter
keine
Einordnung
Typ: Anweisung
Kontext: Strukturkontrolle
Aufgabe: Leitet eine fußgesteuerte Schleife ein
Abkürzung: keine (TSB: reP)
Token: $64 $20 (100 32)
Verwandte Befehle
END LOOP - EXIT - LOOP - UNTIL - FOR - NEXT


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort REPEAT.

Typ: Anweisung
Syntax: REPEAT

REPEAT markiert den Anfang einer fußgesteuerten Schleife, die mit dem Befehl UNTIL endet. Jener Teil eines Programms, der unter Umständen mehrfach durchlaufen werden kann, wird als Schleife bezeichnet. Mehr zum Thema "Schleifen" findet sich unter LOOP.

Es sind bis zu 5 Verschachtelungsebenen möglich. Bei der sechsten quittiert das Programm mit Fehlermeldung ?STACK TOO LARGE ERROR. Da REPEAT seinen eigenen Stack besitzt, ist es unabhängig von der Nutzung des BASIC-Stacks und etwaigen Verschachtelungen von LOOP.
Erst die TSB-Version des Befehls stellt die im Simons' Basic Handbuch versprochene Stack-Tiefe von 20 (entspricht 10 Verschachtelungen) auch tatsächlich zur Verfügung. Wird sie überschritten, gibt es einen ?STACK OVERFLOW ERROR.

Der Stack der REPEAT-UNTIL-Konstruktion wird nicht überwacht. Verlässt man eine solche Schleife vorzeitig, wird der Stack nicht bereinigt und kann bei wiederholter Ausführung überlaufen. Um das zu verhindern, kann man die Speicherstelle $C617 (den REPEAT-Stackpointer) bei einem vorzeitigen Schleifenausstieg manipulieren. Siehe dazu den Abschnitt "Eine Struktur vorzeitig verlassen" in TSB Tricks.


Beispiele[Bearbeiten | Quelltext bearbeiten]

Beispiel 1: eine fußgesteuerte Schleife[Bearbeiten | Quelltext bearbeiten]

10 REPEAT
20   PRINT "Ja (j) oder Nein (n)? ";
30   FETCH "{crsr right}", 1, A$ : REM alle Klein- und Grossbuchstaben
40 UNTIL PLACE (a$, "jnJN")

Ja-Nein-Abfrage, die zwar beliebe Groß- oder Kleinbuchstaben akzeptiert, aber nur "j" und "n" (auch groß) durchreicht und damit die Abfrage beendet.

Beispiel 2: Tastaturabfrage[Bearbeiten | Quelltext bearbeiten]

10 REPEAT: GET X$: UNTIL X$>""

Tastaturabfrage, die in BASIC V2 mühsam mit der Speicherstelle 198, POKE und WAIT zusammengebastelt werden muss oder aber mit folgendem FOR-NEXT-Konstrukt umschrieben werden kann:

10 FOR UNTIL = 0 TO -1 STEP -1
20 GET X$
30 UNTIL = X$>""
40 NEXT

Die Schleife terminiert erst, sobald der Ausdruck X$>"" wahr ist bzw. die Schleifenvariable UNTIL den Wert für wahr bekommt, also diese den Wert -1 erhält, was dem Endwert der Schleife entspricht.
In einer WHILE-Form schreibt sich das Programm dann (etwas kompakter) so:

10 FOR WHILE = -1 TO 0
20 GET X$
30 WHILE = X$=""
40 NEXT

Solange X$ also leer ist, läuft die Schleife weiter.