Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 02.03.2005, 20:07 Titel: Nur Zahlen eingeben... |
|
|
Gibt es einen Befehl womit ich für ein ganzes Programm festlegen kann das nur Zahlen eingegeben werden kann?
Hab in der FAQ schon geschaut ab es nicht so wirklich geschafft... wo muss ich das z.B in dieses Programm schreiben?
1150 LOCATE 17, 15: PRINT "Speicher:", speicher
1155 IF speicher <> 0 THEN
1160 a = speicher: LOCATE 8, 14: PRINT " Ihre Zahl im Speicher war: "; speicher: GOTO 1229:
1165 ELSE GOTO 1200
1170 END IF
1200 LOCATE 8, 15
1210 INPUT "Geben sie ihre erste Zahl ein: ", a
1229 LOCATE 10, 15
1230 INPUT "Geben sie ihre zweite Zahl ein: ", b
1265 LOCATE 15, 15
1270 PRINT a; " +", b; " =", a + b
1271 speicher = a + b
1275 LOCATE 19, 30
1280 INPUT "1 nochmal / 0 Men?: "; c
1300 IF c = 1 GOTO 1100
1310 IF c = 0 GOTO 99
Für jeden Tip dankbar
Freak |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 02.03.2005, 20:12 Titel: |
|
|
Hallo erst mal!
freak987 hat Folgendes geschrieben: |
Gibt es einen Befehl womit ich für ein ganzes Programm festlegen kann das nur Zahlen eingegeben werden kann?
|
Drücke dich mal bitte etwas konkreter aus.
jb |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 02.03.2005, 20:18 Titel: |
|
|
Ich schätze mal er meint ein INPUT, bei dem halt nur Zahlen zugelassen sind
Also ich hab mir jetzt mal folgenden Code überlegt:
Code: |
Text$ = ""
DO
k$ = INKEY$
IF NOT k$ = "" THEN
IF VAL(k$) > 0 OR k$ = "0" THEN Text$ = Text$ + k$
IF k$ = CHR$(8) AND LEN(Text$) > 1 THEN Text$ = LEFT$(Text$, LEN(Text$) - 1)
IF k$ = CHR$(13) THEN EXIT DO
END IF
LOOP
|
Keine Garantie, dass er funktioniert, sollte er aber
PS: Die Zeilennummern kannst du getrost weglassen (sofern du QBASIC oder QuickBASIC benutzt )
Die Zeilennummern welche gleichzeitig Sprungmarken sind musst du natürlich stehenlassen  _________________
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 02.03.2005, 20:30 Titel: |
|
|
Hi!
Ein kleiner Fehler, ICC.
Es muss
heißen, nicht
jb |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 02.03.2005, 20:33 Titel: |
|
|
Oder man schreibt gleich
Ok thx, hast Recht _________________
 |
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 03.03.2005, 00:47 Titel: Wieso? Steht doch in der QB-MonsterFAQ |
|
|
In der MonsterFAQ steht folgendes programm:
Code: |
'******************************************************************
' ZALINPUT.BAS - Auf Zahlen beschraenkte Tasteneingabe
' ============
' Dieses Programm ist ein Ersatz fuer den INPUT-Befehl und
' unterdrueckt Fehleingaben: Es werden nur die Tasten 0...9
' angenommen. Drueckt der Anwender eine andere Taste, passiert -
' gar nichts. Die Enter-Taste beendet die Eingabe.
'
' (c) Thomas Antoni, 25.8.02 - 2.3.04
'*******************************************************************
CLS
PRINT "Gib eine Zahl bis 32000 ein"
PRINT "...Abschluss mit Eingabe-Taste"
DO
LOCATE , , 1 'Cursor anzeigen
t$ = INKEY$
IF t$ <> "" THEN
IF t$ = CHR$(13) THEN EXIT DO 'Abschluss der Eingabe Enter
IF t$ >= "0" AND t$ <= "9" THEN
Eingabe$ = Eingabe$ + t$
PRINT t$;
ELSE
BEEP
END IF
END IF
LOOP
'
eingabezahl% = VAL(Eingabe$) 'Eingabezahl in Integer-Wert umwandeln
PRINT
PRINT "Du hast "; eingabezahl%; " eingegeben."
|
_________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
Nach oben |
|
 |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 03.03.2005, 20:26 Titel: |
|
|
Hi
Hat bis jetzt noch nicht so richtig geklapp...
Wenn ich z.B jetzt dieses Programm hätte:
CLS
Print ""
Input
a + b
IF a = 1 then gosub
IF
....
CLS
Print ""
Input
...
Wenn ich nun für das ganze Programm keine Buchstaben bei "Input" zulassen möchte wo muss ich dann die einzelnen Befehle hinschreiben?
Es soll wirklich einfach nur keine Buchstaben eingegeben werden können, Piepton und weiteren Schnickschnak brauche ich nicht..
Danke schonmal für die bisherige Hilfe |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.03.2005, 21:27 Titel: |
|
|
Vielleicht wieder einmal ein Hinweis auf meine berühmte Artikelsammlung:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html
Hierbei eignet sich der dort vorgestellte INPUT-Ersatz mit geringen Anpassungen sofort, in dem man den Ausschnitt
Code: | SELECT CASE k$
CASE " " TO "~", CHR$(128) TO CHR$(255)
' normales Zeichen |
durch
Code: | SELECT CASE k$
CASE "0" TO "9", ".", "+", "-"
' normales Zeichen (Zahlen) |
ersetzt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.03.2005, 21:31 Titel: |
|
|
Hallo.
Mit dem INPUT-Befehl kann man nicht festlegen, ob nur Zahlen
eingegeben werden sollen oder nicht.
Da muss man sich schon eine eigene Routine erstellen.
Bsp:
Code: |
SUB Eingabe(Zahl, MaxZahl)
TMP$ = ""
Zeile = CSRLIN
Spalte = POS(0)
DO
Test$ = TMP$
K$ = INKEY$
IF K$ = CHR$(13) THEN
EXIT DO
ELSEIF VAL(K$) > 0 OR K$ = "0" THEN
TMP$ = TMP$ + K$
IF VAL(TMP$) > MaxWert THEN TMP$ = LEFT$(TMP$, LEN(TMP$) - 1)
ELSEIF K$ = CHR$(27) THEN
TMP$ = ""
ELSEIF K$ = CHR$(8) THEN
IF LEN(TMP$) >= 1 THEN TMP$ = LEFT$(TMP$, LEN(TMP$) - 1)
END IF
IF TMP$ <> Test$ THEN
LOCATE Zeile, Spalte
PRINT TMP$
END IF
LOOP
Zahl = VAL(TMP$)
TMP$ = ""
END SUB
|
Anstatt
musst du dann nur noch
schreiben.
Alles klar?
EDIT: Beim Aufruf der SUB Eingabe musst du jetzt
schreiben, wenn 10 der Maximalwert sein soll.
jb
Zuletzt bearbeitet von jb am 05.03.2005, 20:55, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 04.03.2005, 15:27 Titel: |
|
|
Danke jb
Bis auf das ich noch 3x then eingeben musste funktioniert das Programm super
Könntest du mir noch veraten was ich verändern muss wenn ich auch keine Zahlen über 10 zulassen möchte?
Und noch etwas, wenn ich die Taste über Enter (Rückstelltaste) drücke geht er zwar zurück löscht aber auf dem Bildschirm nicht die Zahl, wie funktioniert das? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 04.03.2005, 23:18 Titel: |
|
|
freak987 hat Folgendes geschrieben: |
Bis auf das ich noch 3x then eingeben musste funktioniert das Programm super
|
Huups, kann passieren.
freak987 hat Folgendes geschrieben: |
Könntest du mir noch veraten was ich verändern muss wenn ich auch keine Zahlen über 10 zulassen möchte?
|
Einfach mit VAL() überprüfen, ob > 10.
Code: |
IF VAL(TMP$) < 10 THEN ...
|
Was meinst du mit
freak987 hat Folgendes geschrieben: |
Und noch etwas, wenn ich die Taste über Enter (Rückstelltaste) drücke geht er zwar zurück löscht aber auf dem Bildschirm nicht die Zahl, wie funktioniert das?
|
Kann natürlich sein, dass da noch ein Fehler drin steckt...
EDIT: Ja, ich habe den Fehler gefunden. Es muss
Code: |
IF TMP$ <> Test$ THEN
LOCATE Zeile, Spalte
PRINT STRING$(LEN(TMP$) + 1, " ")
LOCATE Zeile, Spalte
PRINT TMP$
END IF
|
heißen, d.h. der Hintergrund muss ja vorher gelöscht werden, sonst
bekommt man von der Veränderung ja nichts mit.
jb |
|
Nach oben |
|
 |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 05.03.2005, 20:06 Titel: |
|
|
Wo muss ich das IF VAL(TMP$) < 10 THEN einfügen, bzw. was muss ich dann noch im Programm ergänzen damit das läuft?
Wenn ich nun noch:
LOCATE Zeile, Spalte
PRINT STRING$(LEN(TMP$) + 1, " ")
einfüge, dann kann ich gar nichts mehr eingeben!
Wär nett wenn du mir noch mal helfen könntest  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.03.2005, 20:52 Titel: |
|
|
Du musst vor jeder Tastatureingabe prüfen, ob, wenn zu TMP$ die Eingabe(k$) hinzugefügt wird, VAL(TMP$) < 10 ist. Wenn dies so ist, kannst du
normal fortfahren.
Werde gleich den Code oben editieren.
Das
Code: |
LOCATE Zeile, Spalte
PRINT STRING$(LEN(TMP$) + 1, " ")
|
muss natürlich vor
Code: |
LOCATE Zeile, Spalte
PRINT TMP$
|
jb |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.03.2005, 21:14 Titel: |
|
|
Zum Thema Bereichsprüfung: Bevor man VAL() anwendet, sollte man immer eine Grobprüfung auf Stringebene durchführen, z.B. nur bestimmtes Maximum von Ziffern erlaubt, sonst kann man leicht einen Overflow (Überlauf)-Fehler produzieren, wenn der Anwender einen zu grossen Wert eingibt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.03.2005, 21:39 Titel: |
|
|
Ja klar, aber bei 10 sollte das ja noch gehen...
jb |
|
Nach oben |
|
 |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 06.03.2005, 13:08 Titel: |
|
|
So hab ich es mit vorgstellt
Dankeschön
Letzte Bitte:
Kann man irgendwie noch den Punkt (.) zulassen?
Wenn ja wo muss ich den dann wieder einfügen  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.03.2005, 13:16 Titel: |
|
|
Einfach die Zeile
Code: |
ELSEIF VAL(K$) > 0 OR K$ = "0"
|
zu
Code: |
ELSEIF VAL(K$) > 0 OR K$ = "0" OR K$ = "."
|
umändern.
jb |
|
Nach oben |
|
 |
freak987
Anmeldungsdatum: 27.02.2005 Beiträge: 9
|
Verfasst am: 06.03.2005, 18:22 Titel: |
|
|
Dankeschön |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.03.2005, 21:14 Titel: |
|
|
OK, alles klar!
jb |
|
Nach oben |
|
 |
|