INPUT
INPUT | |
Syntax: | INPUT ["<Kommentar>";]<Variable>[,<Variable>…] |
Parameter | |
<Kommentar>: Beliebiger Text in Hochkommas, aber keine Variablen | |
<Variable>: Variable beliebigen Typs zur Übernahme der eingegeben Daten | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Ein/Ausgabe |
Aufgabe: | Eingabe von Daten über die Tastatur |
Abkürzung: | - |
Token: | $85 (133) |
Verwandte Befehle | |
GET, GET#, INPUT# |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl INPUT unter BASIC V2 des Commodore 64.
Der BASIC-Befehl INPUT dient zur Eingabe von Daten innerhalb eines BASIC-Programms.
Nach der Ausgabe eines optional angegebenen Kommentars (eine Zeichenkettenkonstante) wird ein Fragezeichen (?) als Prompt angezeigt; danach zeigt der blinkende Cursor das Warten auf die Dateneingabe an.
Die Dateneingabe wird in Variablen (wahlweise Zeichenkette- oder Zahlvariablen) gespeichert, nachdem die Dateneingabe mit der Taste RETURN beendet wurde.
INPUT ist ein recht eigenwilliger Befehl und hat zahlreiche Fallstricke.
- Bestimmte Zeichen haben eine Sonderstellung
- Dadurch passiert es leicht, dass "falsche" Eingaben Fehlermeldungen provozieren und so ein gegebenes Bildschirmlayout verunstaltet wird
- Ebenso kann die Eingabe leicht misinterpretiert bzw. verstümmelt werden (z.B. durch einen Doppelpunkt in der Eingabe)
- Die Cursortasten bleiben aktiviert
- Bereits vorher auf dem Bildschirm durch das Programm ausgegebene Zeichen können als Eingabe interpretiert werden
- Eine Überprüfung der Eingabe (z.B. ob die Eingabe bei Abfrage einer Zahlvariable auch tatsächlich als Zahl interpretiert werden kann) erfolgt erst nach RETURN anstatt dass z.B. in dem Fall Buchstaben und Sonderzeichen direkt abgefangen werden
- Die Eingabelänge ist auf maximal 80 Zeichen beschränkt, längere Eingaben werden kommentarlos beschnitten
Im Allgemeinen wird ein Programmierer besser beraten sein, eine eigene Eingaberoutine zu bauen, die diese Eigenheiten nicht hat; Beispiele dafür siehe GET.
Details[Bearbeiten | Quelltext bearbeiten]
Zeichen mit Sonderstellung bei der Eingabe:
- Komma (,) - Trennt mehrere Eingabewerte (mehrfache Variablenangaben bei einem INPUT-Befehl). Umgehung mittels Anführungszeichen möglich.
- Doppelpunkt (:) - Nachfolgende Zeichen werden ignoriert. Umgehung mit Anführungszeichen möglich.
- Leerzeichen - Vor dem ersten Nicht-Leerzeichen (auch nach einem Komma) werden ignoriert. Solche vor einem Komma oder Doppelpunkt bleiben erhalten. Umgehung mittels Anführungszeichen möglich.
- Anführungszeichen (") am Beginn (abgesehen von Leerzeichen) - Damit ist auch die Eingabe von Komma und Doppelpunkt möglich. Die Eingabe muss nicht zwingend mit einem Anführungszeichen enden, aber falls ein Anführungszeichen vorkommt, muss es sich am Schluss der Eingabe befinden, andernfalls wird nach der Fehlermeldung ?REDO FROM START erneut die Eingabe verlangt.
Sollte bereits im Text des Kommentarparameters darauf hingewiesen werden, dass mehrere Dateneingaben erwartet werden, kann der Benutzer die geforderten Dateneingaben bereits getrennt durch Kommas (,) eingeben. Dies umgeht das Verhalten, bei dem der INPUT-Befehl sonst nochmals mit Doppelfragezeichen (??) auf weitere erforderliche Dateneingaben hinweist und erneut auf deren Eingabe wartet. Werden hierbei zu viele Daten durch Kommas (,) getrennt eingegeben, wird die BASIC-Meldung ?EXTRA IGNORED ausgegeben, aber das Programm weiter ausgeführt. Das heißt, die zu viel eingegebenen Daten werden ignoriert und nicht in den Variablen abgespeichert.
Falls keine Dateneingabe erfolgt und nur die Taste RETURN gedrückt wird, entspricht das einer Leereingabe und diese verändert den Variableninhalt nicht (was allerdings voraussetzt, dass dort, wo die Eingabe erfolgt auch tatsächlich der Bildschirminhalt "leer" ist, siehe weiter unten Vorgabewerteingaben).
Befindet sich an der Eingabeposition bereits ein Text (bzw. bewegt man den Cursor zu einem Bildschirmbereich, der bereits einen Inhalt aufweist), so kann dieser einfach mittels RETURN übernommen werden.
Der Bildschirmeditor erlaubt lediglich die Eingabe von maximal 80 Zeichen. Gleichzeitig erlauben die Cursor-Tasten das Navigieren durch den gesamten Bildschirmbereich und auch das Scrollen des Bilderschirminhaltes, was die kontrollierte Verwendung im Hinblick auf den Bildschirminhalt, aber auch Umfang und Inhalt der Eingabe unmöglich macht.
Die BASIC-Meldung ?REDO FROM START tritt bei einer
- Zahlvariable auf, wenn die Eingabe keinen Zahlenwert beinhaltet oder
- Zeichenkettenvariable auf, wenn die Eingabe eine falsche Quotierung des Inhaltes mit Anführungszeichen ("), z.B.
"A"B
aufweist.
Das heißt, die Syntax der Eingabe ist nicht die erwartete und die Dateneingabe muss erneut getätigt werden. Um diese BASIC-Meldung im ersten Fall zu vermeiden, empfiehlt es sich, für das Einlesen stets Zeichenkettenvariablen zu verwenden.
Im Falle der Überschreitung des erlaubten Wertebereichs tritt bei einer Ganzzahlvariable die Fehlermeldung ?ILLEGAL QUANTITY ERROR und bei einer Fließkommavariable ?OVERFLOW ERROR auf.
Falls der INPUT-Befehl nicht innerhalb von BASIC-Programmen verwendet wird, erscheint die BASIC-Fehlermeldung ?ILLEGAL DIRECT ERROR.
Während der Eingabe hat die RUN/STOP keine Wirkung, bestenfalls in der Kombination RUN/STOP +RESTORE kann ein Abbruch erzwungen werden bzw. auch normal im Programmablauf zwischen INPUT-Aufrufen.
Trivia[Bearbeiten | Quelltext bearbeiten]
- Wenn man zuvor z.B. mit
POKE 19,1
(Zeropage) die aktuelle Eingabe-Dateinummer auf einen Wert größer als 0 setzt, wird das "?" unterdrückt und bleibt nach der Eingabe mit RETURN bis zu einemPOKE 19,0
aktiv, sofern es nicht von einer Bildschirmeingabe im Programm (z.B. mit GET) wieder auf 0 gesetzt wurde. Ist PEEK(19)>0, wird mit dem Fehler ?FILE DATA ERROR abgebrochen, wo sonst mit ?REDO FROM START weiter eingelesen wird. Die Speicherstelle 19 muss spätestens dann wieder den Wert 0 besitzen, wenn im Direktmodus Änderungen am BASIC-Programm vorgenommen werden sollen. - In BASIC 7.0 ist
POKE 21,1
zu setzen, um die "?" bei nachfolgenden INPUT zu unterdrücken,POKE 21,0
stellt wieder das ursprüngliche Verhalten ein.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Alternative für Benutzereingaben robustere Routinen finden sich im Artikel GET.
Variationen der Eingabe in Anzahl und Variablentypen:
10 INPUT "IHRE EINGABE BITTE "; A$ 20 INPUT "BITTE NUR ZAHLENWERTE (2 MAL) "; A1, A2% 40 PRINT: PRINT "IHRE EINGABEN WAREN BISHER: " A$, A1, A2% 50 PRINT: PRINT "NUN BITTE WIEDER ZAHLENWERTE (3 MAL) "; 60 INPUT A1%, B, Z 70 PRINT: PRINT "UND NUN 3 MAL IST ALLES MOEGLICH "; 80 INPUT A$, B$, C$ 90 PRINT: PRINT "SIE GABEN DIESMAL EIN: "; A1%, B, Z, A%, B$, C$
Abfrage mit Vorgabewert:
10 PRINT "{clr}JAHR 2014{left}{left}{left}{left}{left}{left}"; 20 INPUT JA$ 30 PRINT "JAHRESANGABE: ";JA$
Gibt man nur RETURN ein, wird der bereits angezeigt Wert 2014 in die Variable JA$ übernommen.
Auswirkung von Sonderzeichen bzw. diese einlesen:
10 INPUT "ZEICHENKETTE";Z$ 20 PRINT "<"Z$">" 30 GOTO 10
RUN ZEICHENKETTE? " :,-( " < :,-( > ZEICHENKETTE? ABC:DEF <ABC> ZEICHENKETTE? 10LEERZEICHEN : ?EXTRA IGNORED <10LEERZEICHEN > |
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT