GO, GOTO

Der BASIC-Befehl GOTO lässt den BASIC-Interpreter zur angegebenen Zeilennummer springen und die Abarbeitung des BASIC-Programms wird an dieser Stelle fortgesetzt. Die Zeilennummer muss eine numerische Konstante sein, dessen Wert im Bereich für Zeilennummer (0-63999) liegen sollte. Nicht ganzzahlige Werte werden implizit analog zu INT in eine entsprechende Ganzzahl umgewandelt. Ein fehlender Parameter oder einer, der nicht numerisch ist (Variablen-Namen, Zeichenketten usw.) wird als Zeilennummer 0 verstanden – führt also nicht zwangsläufig zu einem Fehler (nur wenn die Zeile 0 nicht existiert, was aber zur Fehlererkennung empfehlenswert ist).

Ein weiteres Einsatzgebiet ist die bedingte Programmflusssteuerung, wo sich die GOTO-Funktion in den Konstruktionen IF…THEN, IF…GOTO, ON…GOTO wieder findet.

Mit dem BASIC-Befehl GOTO können auch Endlosschleifen programmiert werden. Der Programmcode 55 GOTO 55 lässt sich nur noch durch Drücken der Taste RUN/STOP  unterbrechen.

Der BASIC-Befehl GOTO kann im Direktmodus dazu genutzt werden, um so ähnlich wie beim BASIC-Befehl RUN <Zeilennummer> oder nach einer Unterbrechung mittels CONT Programme auch ab einer bestimmten Zeilennummer zu starten oder weiterlaufen zu lassen.
War das Programm zuvor bereits aktiv oder wurde es mit RUN/STOP  oder einem STOP- oder END-Befehl innerhalb des Programms angehalten, bleiben alle aktuellen Variablen-Werte erhalten. Im Gegensatz dazu hätte ein erneuter Start mit RUN die Auswirkung, dass alle Variablen gelöscht und die Zustände von Schleifen und Unterprogrammen zurückgesetzt werden (vergleiche auch CLR).

Die Schreibweise GO TO ist ebenso möglich, benötigt aber mehr Programmspeicherplatz (2 Byte mehr: für Leerzeichen und ein zusätzliches Token), was auch zum Nachteil in der Ausführungsgeschwindigkeit gereicht. Der Vorteil der besseren Leserlichkeit fällt eher gering aus.

Existiert die Zeilennummer nicht, die angesprungen werden soll, wird die BASIC-Fehlermeldung ?UNDEF'D STATEMENT ERROR ausgegeben. Liegt die Zeilennummer außerhalb des zulässigen Bereichs, wird mit ?SYNTAX ERROR abgebrochen.

Beispiele

10 C=0: PRINT CHR$(147);: INPUT "Geben Sie bitte eine Zahl ein "; A
20 PRINT "Geben Sie bitte eine weitere Zahl ein "; 
30 INPUT B: IF C=1 AND B=0 GOTO 30
31 IF C=1 AND B<>0 GOTO 74
40 C=1: INPUT "Geben Sie bitte ein Rechenzeichen ein (+-/*) "; A$
50 IF A$<>"+" OR A$<>"-" OR A$<>"*" OR A$<>"/" GOTO 30
60 IF B=0 AND A$="/" THEN PRINT "Division durch 0 unmoeglich. Korrektureingabe:";: GO TO 30
70 IF A$="+" THEN C=A+B: B$="ADDITION"
71 IF A$="-" THEN C=A-B: B$="SUBTRAKTION"
72 IF A$="*" THEN C=A*B: B$="MULTIPLIKATION"
73 IF A$="/" THEN C=A/B: B$="DIVISION"
74 PRINT "Sie waehlten: " B$
75 PRINT "Das Ergebnis lautet: " C
80 INPUT "Noch eine Berechnung durchfuehren (J=JA, Abbruch andere Zeichen)"; A$
90 IF A$="J" THEN GOTO 10