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:

Eingabeabsicherung

 
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
Smokie_joe



Anmeldungsdatum: 09.05.2005
Beiträge: 16

BeitragVerfasst am: 16.05.2005, 22:38    Titel: Eingabeabsicherung Antworten mit Zitat

Hallo alle zusammen, zwinkern
hab wieder ma ne kurze Frage.

Wie kann ich eine Eingabeprüfung vornehmen ob
eine Zahl eingegeben wurde. verlegen

Denn ich will eine Zahlenvariable einlesen u. einen Schutz einbauen
,falls mir jemand ein Zeichen eingibt.

in etwa so (natürlich über qb befehle) durchgeknallt
if eingabe = String starte abfrage erneut.


Besten dank im Voraus




P.S: ich liebe diese Smilies mit dem Kopf durch die Mauer wollen mit dem Kopf durch die Mauer wollen durchgeknallt grinsen schimpfen Hammer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 16.05.2005, 22:42    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.05.2005, 23:21    Titel: Antworten mit Zitat

Hi Smokie Joe!


Ganz Nebenbei: Cooler Name zwinkern


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



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 16.05.2005, 23:35    Titel: Antworten mit Zitat

er will auch Floats matchen.. ich geb grad PN-Nachhilfe happy
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Smokie_joe



Anmeldungsdatum: 09.05.2005
Beiträge: 16

BeitragVerfasst am: 17.05.2005, 00:00    Titel: Antworten mit Zitat

danke für eure hilfe !

u. danke für das das Kompliment dusky_ lächeln

kann ich nur zurückgeben grinsen


mfg
smokie
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 17.05.2005, 22:48    Titel: Antworten mit Zitat

Siehe dazu

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html

Hierbei kannst Du beim INPUT-Ersatz die Zeile
Code:
CASE " " TO "~", CHR$(128) TO CHR$(255)

durch etwas eigenes anpassen, z.B.
Code:
CASE "0" TO "9", "+", "-", ".", "E", "e"

und so die für die Eingabe zulässigen Zeichen beliebig einschränken.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 18.05.2005, 11:20    Titel: Antworten mit Zitat

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