 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Smokie_joe

Anmeldungsdatum: 09.05.2005 Beiträge: 16
|
Verfasst am: 16.05.2005, 22:38 Titel: Eingabeabsicherung |
|
|
Hallo alle zusammen,
hab wieder ma ne kurze Frage.
Wie kann ich eine Eingabeprüfung vornehmen ob
eine Zahl eingegeben wurde.
Denn ich will eine Zahlenvariable einlesen u. einen Schutz einbauen
,falls mir jemand ein Zeichen eingibt.
in etwa so (natürlich über qb befehle)
if eingabe = String starte abfrage erneut.
Besten dank im Voraus
P.S: ich liebe diese Smilies  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 16.05.2005, 22:42 Titel: |
|
|
öhm in wie fern? du kannst zB einfach INPUT zahl% machen. dann wird das automatisch abgefangen..
wenn du eine Zahl selbst prüfen willst musst du schaun, was du alles als Gültig ansiehst.. in QB wären Gültige Zahlen zB:
&HA8
1.29438E-3
5.0
also musst du dir da was einfallen lassen.
wenns nur um Integerzahlen geht musst du einfach für jedes Zeichen der Kette schaun, ob es in "0123456789" vorhanden ist, schau dazu mal INSTR in der QB-Onlinehilfe an. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 16.05.2005, 23:21 Titel: |
|
|
Hi Smokie Joe!
Ganz Nebenbei: Cooler Name
MisterD's Variante ist wohl am ehesten zu empfehlen. Wenn du aber aus irgendeinem Grund darauf angewiesen bist, die Eingabe in einem String zu speichern, kannst du INSTR verwenden:
Code: | 'In diese Variable wird eine Liste der Zeichen gespeichert, die nicht
'erlaubt sind.
'=> Alles außer den Zahlen-Zeichen
DIM NotAllowed AS STRING * 246
'Eingegebene Zahl, gespeichert in einem STRING
DIM Eingabe AS STRING
'Liste befüllen
FOR i = 0 TO ASC("0")
MID$(NotAllowed, i + 1, 1) = CHR$(i)
NEXT
FORi = ASC("9") + 1 TO 255
MID$(NotAllowed, i - 9, 1) = CHR$(i)
NEXT
'Eingabe...
INPUT "Zahl eingeben"; Eingabe
'Prüfe, ob eines der nicht erlaubten Zeichen in Eingabe vorkommt
Fehler = 0
FOR i = 1 TO 246
IF INSTR(Eingabe, MID$(NotAllowed, i, 1)) THEN
Fehler = 1
EXIT FOR
END IF
NEXT
'Wenn ein Zeichen vorgekommen ist, dann...
IF Fehler THEN
...
ELSE 'Ansonsten Wert ermitteln
value = VAL(Eingabe)
END IF
... |
Die Input-Variante ist natürlich wesentlich einfacher:
Code: | INPUT "Zahl eingeben"; zahl% |
Wenn du etwas anderes eingibst, als eine Zahl (egal welchen Formats; hexadezimale Zahlen werden auch erkannt, wenn sie mit &H beginnen, selbes gilt für oktale Zahlen, wenn sie mit &O beginnen), erzeugt QB automatisch einen Error-Prompt "Bitte Zahl eingeben. Wiederholung" oder so etwas...
Kommazahlen werden wie beim ganz normalen Programmieren mit einem Punkt (.) als dezimalzeichen angegeben, aber das ist ja eh klar... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 16.05.2005, 23:35 Titel: |
|
|
er will auch Floats matchen.. ich geb grad PN-Nachhilfe  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Smokie_joe

Anmeldungsdatum: 09.05.2005 Beiträge: 16
|
Verfasst am: 17.05.2005, 00:00 Titel: |
|
|
danke für eure hilfe !
u. danke für das das Kompliment dusky_
kann ich nur zurückgeben
mfg
smokie |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 18.05.2005, 11:20 Titel: |
|
|
Nach dem Prinzip funktioniert auch ein INPUT-Ersatz, den ich einmal für Grafik-Modi geschrieben habe..:
Code: | sub IFont (Text AS String, x as integer, y as integer, fore as integer, back as integer, Ans as string)
if len(Text) then
SFont Text, x, y, fore, back
x = x + Adrs(32, 2)
end if
tx = x
do
sleep 100
k$ = inkey$
select case k$
case chr$(0) 'keine Taste gedrückt
case chr$(13) 'Enter
'-> wird unten noch geprüft, soll hier nur nicht das ELSE auslösen.
case chr$(8) 'Backspace
if len(Ans) then
x = x - Adrs(Asc(Ans, len(Ans) - 1), 2)
SFont " ", x, y, fore, back
Ans = left$(Ans, Len(Ans) - 1)
else
beep
end if
case else
Ans = Ans + k$
end select
SFont Ans, x, y, fore, back
x = tx
loop until k$ = chr$(13)
end sub |
das ganze ist für freeBASIC, deswegen auch das SLEEP 100.
SFont ist dabei eine andere Routine (von mir), die PRINT erstetzt.
Interessant wäre für dich der Teil ab DO... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|
|
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.
|
|