Schnell nachschlagen
| Meldung | Bedeutet |
|---|---|
?SYNTAX ERROR | BASIC hat die Zeile nicht verstanden. |
?TYPE MISMATCH ERROR | Text und Zahl wurden vermischt. |
?DIVISION BY ZERO ERROR | Es wurde durch null geteilt. |
?ILLEGAL QUANTITY ERROR | Ein Wert liegt ausserhalb des erlaubten Bereichs. |
?OUT OF DATA ERROR | READ wollte lesen, aber es sind keine DATA-Werte mehr übrig. |
?NEXT WITHOUT FOR ERROR | Ein NEXT steht da, ohne dass eine passende Schleife offen ist. |
?RETURN WITHOUT GOSUB ERROR | Ein RETURN wurde erreicht, ohne dass vorher ein GOSUB gesprungen ist. |
?UNDEF’D STATEMENT ERROR | Das Sprungziel gibt es nicht. |
?UNDEF’D FUNCTION ERROR | Eine mit FN aufgerufene Funktion wurde nie definiert. |
?BAD SUBSCRIPT ERROR | Der Zugriff auf ein Feld liegt ausserhalb seiner Grösse. |
?CAN’T CONTINUE ERROR | CONT konnte das Programm nicht fortsetzen. |
?TOO MANY STEPS ERROR | Das Programm lief sehr lange, ohne fertig zu werden. |
Die Grundregel
BASIC prüft eine Zeile erst, wenn sie an die Reihe kommt. Ein Tippfehler in Zeile 200 fällt also erst auf, wenn das Programm dort ankommt. Deshalb gilt: Die genannte Zeile ist fast immer der richtige Ort zum Suchen, und eine Zeile lässt sich jederzeit reparieren, indem du sie mit derselben Nummer neu eintippst.
Tauchen in den Erklärungen unbekannte Begriffe auf, hilft das Glossar weiter.
?SYNTAX ERROR
BASIC hat die Zeile nicht verstanden.
Häufige Ursachen:
- Ein Befehl ist falsch geschrieben, etwa
PRNTstattPRINT. - Ein Anführungszeichen oder eine Klammer fehlt.
- Ein Komma oder Strichpunkt steht an der falschen Stelle.
- Ein Befehl wurde benutzt, den dieser Nachbau nicht kennt.
Tippe die gemeldete Zeile noch einmal komplett neu ein. Bei längeren Zeilen hilft es, sie in zwei kürzere aufzuteilen, dann ist schneller klar, welcher Teil klemmt.
10 PRNT "HALLO"
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?SYNTAX ERROR.
?TYPE MISMATCH ERROR
Text und Zahl wurden vermischt.
Häufige Ursachen:
- Eine Zahl wurde einer Textvariablen zugewiesen oder umgekehrt.
- In einem Vergleich stehen Text und Zahl gegenüber, etwa
IF A$=5. - Mit Text wurde gerechnet:
A$-1ergibt keinen Sinn.
Achte auf das Dollarzeichen: A speichert Zahlen, A$ speichert Text. Umwandeln kannst du mit VAL() (Text zu Zahl) und STR$() (Zahl zu Text).
10 A$="HALLO"
20 PRINT A$-1
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?TYPE MISMATCH ERROR.
?DIVISION BY ZERO ERROR
Es wurde durch null geteilt.
Häufige Ursachen:
- Ein Teiler ist null, oft weil eine Variable noch gar keinen Wert hat.
- Eine Formel ergibt unter bestimmten Eingaben null im Nenner.
Prüfe den Teiler vorher ab: IF T=0 THEN 100 und behandle den Fall getrennt. Nicht gesetzte Variablen sind in BASIC immer null.
10 A=10
20 PRINT A/B
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?DIVISION BY ZERO ERROR.
?ILLEGAL QUANTITY ERROR
Ein Wert liegt ausserhalb des erlaubten Bereichs.
Häufige Ursachen:
- Bei
POKEist der Wert grösser als 255 oder negativ. - Eine Speicheradresse liegt ausserhalb von 0 bis 65535.
- Eine Funktion bekommt einen unzulässigen Wert, etwa
SQR(-1)oderLOG(0).
Eine Speicherstelle fasst genau ein Byte, also 0 bis 255. Grössere Werte muss man auf mehrere Stellen aufteilen. Bei Wurzeln und Logarithmen das Vorzeichen prüfen.
10 POKE 53280,300
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?ILLEGAL QUANTITY ERROR.
?OUT OF DATA ERROR
READ wollte lesen, aber es sind keine DATA-Werte mehr übrig.
Häufige Ursachen:
- Die Schleife liest öfter, als Werte vorhanden sind.
- Eine DATA-Zeile wurde gelöscht oder vergessen.
- Pro Durchlauf werden mehr Werte gelesen als gedacht.
Zähle die Werte in den DATA-Zeilen und vergleiche sie mit der Anzahl der READ-Vorgänge. Mit RESTORE lässt sich der Lesezeiger an den Anfang zurücksetzen.
10 FOR I=1 TO 5
20 READ A
30 NEXT
40 DATA 1,2,3
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?OUT OF DATA ERROR.
?NEXT WITHOUT FOR ERROR
Ein NEXT steht da, ohne dass eine passende Schleife offen ist.
Häufige Ursachen:
- Die FOR-Zeile fehlt oder wurde gelöscht.
- Ein Sprung hat die FOR-Zeile übersprungen.
- Bei verschachtelten Schleifen stimmt die Reihenfolge der NEXT nicht.
- Das
NEXTnennt eine Variable, zu der es keine offene Schleife gibt.
Verschachtelte Schleifen müssen von innen nach aussen geschlossen werden. Schreib die Variable mit dazu, also NEXT I, das macht Fehler sofort sichtbar.
10 PRINT "START"
20 NEXT I
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?NEXT WITHOUT FOR ERROR.
?RETURN WITHOUT GOSUB ERROR
Ein RETURN wurde erreicht, ohne dass vorher ein GOSUB gesprungen ist.
Häufige Ursachen:
- Das Hauptprogramm läuft in das Unterprogramm hinein, weil davor das
ENDfehlt. - Ein Unterprogramm wurde mit GOTO statt mit GOSUB angesprungen.
Setze vor den ersten Unterprogramm-Zeilen ein END. Das ist mit Abstand die häufigste Ursache.
10 PRINT "START"
20 GOSUB 100
100 PRINT "SUB"
110 RETURN
120 RETURN
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?RETURN WITHOUT GOSUB ERROR.
?UNDEF’D STATEMENT ERROR
Das Sprungziel gibt es nicht.
Häufige Ursachen:
- Ein
GOTOoderGOSUBzeigt auf eine Zeilennummer, die nicht existiert. - Die Zielzeile wurde gelöscht oder umnummeriert.
- Zahlendreher in der Zeilennummer.
Mit LIST nachsehen, welche Zeilennummern es wirklich gibt. Genau deshalb nummeriert man in Zehnerschritten: Dann bleibt Platz zum Einfügen, ohne Sprünge anpassen zu müssen.
10 PRINT "HALLO"
20 GOTO 500
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?UNDEF’D STATEMENT ERROR.
?UNDEF’D FUNCTION ERROR
Eine mit FN aufgerufene Funktion wurde nie definiert.
Häufige Ursachen:
- Der
DEF FN-Befehl fehlt oder wurde noch nicht ausgeführt. - Der Funktionsname ist unterschiedlich geschrieben.
Die Definition mit DEF FN muss vor dem ersten Aufruf durchlaufen worden sein, üblicherweise gleich am Programmanfang.
10 PRINT FN Q(3)
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?UNDEF’D FUNCTION ERROR.
?BAD SUBSCRIPT ERROR
Der Zugriff auf ein Feld liegt ausserhalb seiner Grösse.
Häufige Ursachen:
- Der Index ist grösser als bei
DIMangegeben. - Ein Feld wurde ohne DIM benutzt und hat deshalb nur die Plätze 0 bis 10.
- Der Index ist negativ.
Die Obergrenze der Schleife mit der DIM-Angabe vergleichen. Denk daran: DIM A(5) legt sechs Plätze an, A(0) bis A(5).
10 DIM A(5)
20 A(9)=1
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?BAD SUBSCRIPT ERROR.
?CAN’T CONTINUE ERROR
CONT konnte das Programm nicht fortsetzen.
Häufige Ursachen:
- Es wurde nie ein Programm angehalten, also gibt es nichts fortzusetzen.
- Das Programm wurde nach dem Anhalten verändert.
- Es lief bereits bis zum Ende durch.
CONT funktioniert nur direkt nach einem STOP oder einem Abbruch, und nur solange das Programm unverändert bleibt. Sonst hilft nur ein neues RUN.
CONT
Zum Ausprobieren gedacht: Dieses Beispiel erzeugt die Meldung ?CAN’T CONTINUE ERROR.
?TOO MANY STEPS ERROR
Das Programm lief sehr lange, ohne fertig zu werden.
Diese Meldung gibt es auf dem echten C64 nicht. Sie stammt von diesem Browser-Nachbau, der ein endlos laufendes Programm irgendwann anhält, damit die Seite nicht hängen bleibt.
Häufige Ursachen:
- Eine Endlosschleife ohne Abbruchbedingung.
- Eine Schleife, deren Zähler das Ziel nie erreicht.
- Eine sehr rechenintensive Schleife, die tatsächlich so lange braucht.
Prüfe die Abbruchbedingung deiner Schleife. War die lange Laufzeit Absicht, lässt sich das Programm jederzeit mit der Esc-Taste anhalten, statt auf diese Meldung zu warten.
Meldungen vom echten C64, die es hier nicht gibt
Der originale C64 kannte noch einige Meldungen mehr, vor allem rund um Speicher und Peripherie: ?OUT OF MEMORY ERROR, ?STRING TOO LONG ERROR, ?FORMULA TOO COMPLEX ERROR, ?FILE NOT FOUND ERROR und ?DEVICE NOT PRESENT ERROR. Sie betreffen Diskettenlaufwerk, Drucker und die 64 Kilobyte Arbeitsspeicher, die es in dieser Form im Browser nicht gibt.
Warum der C64 so sparsam mit Erklärungen war, hat historische Gründe: Sein BASIC stammte aus einer Zeit, in der jedes Byte im ROM zählte. Mehr dazu in der Geschichte von BASIC.