Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Nur Zahlen eingeben...

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 02.03.2005, 20:07    Titel: Nur Zahlen eingeben... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 02.03.2005, 20:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 02.03.2005, 20:18    Titel: Antworten mit Zitat

Ich schätze mal er meint ein INPUT, bei dem halt nur Zahlen zugelassen sind lächeln

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 durchgeknallt

PS: Die Zeilennummern kannst du getrost weglassen (sofern du QBASIC oder QuickBASIC benutzt grinsen )
Die Zeilennummern welche gleichzeitig Sprungmarken sind musst du natürlich stehenlassen zwinkern
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 02.03.2005, 20:30    Titel: Antworten mit Zitat

Hi!

Ein kleiner Fehler, ICC.

Es muss
Code:

IF LEN(Text$) >= 1

heißen, nicht
Code:

IF LEN(Text$) > 1


jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 02.03.2005, 20:33    Titel: Antworten mit Zitat

verlegen
Oder man schreibt gleich
Code:

IF LEN(Text$) > 0

durchgeknallt lachen

Ok thx, hast Recht
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 03.03.2005, 00:47    Titel: Wieso? Steht doch in der QB-MonsterFAQ Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 03.03.2005, 20:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 03.03.2005, 21:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 03.03.2005, 21:31    Titel: Antworten mit Zitat

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
Code:

INPUT a

musst du dann nur noch
Code:

Eingabe a

schreiben.

Alles klar?

EDIT: Beim Aufruf der SUB Eingabe musst du jetzt
Code:

Eingabe a, 10

schreiben, wenn 10 der Maximalwert sein soll.

jb


Zuletzt bearbeitet von jb am 05.03.2005, 20:55, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 04.03.2005, 15:27    Titel: Antworten mit Zitat

Danke jb

Bis auf das ich noch 3x then eingeben musste funktioniert das Programm super happy

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 04.03.2005, 23:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 05.03.2005, 20:06    Titel: Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 05.03.2005, 20:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 05.03.2005, 21:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 05.03.2005, 21:39    Titel: Antworten mit Zitat

Ja klar, aber bei 10 sollte das ja noch gehen... zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 06.03.2005, 13:08    Titel: Antworten mit Zitat

So hab ich es mit vorgstellt happy
Dankeschön

Letzte Bitte:
Kann man irgendwie noch den Punkt (.) zulassen?
Wenn ja wo muss ich den dann wieder einfügen happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.03.2005, 13:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
freak987



Anmeldungsdatum: 27.02.2005
Beiträge: 9

BeitragVerfasst am: 06.03.2005, 18:22    Titel: Antworten mit Zitat

Dankeschön
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.03.2005, 21:14    Titel: Antworten mit Zitat

OK, alles klar!

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz