Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
s-m-n
Anmeldungsdatum: 03.10.2005 Beiträge: 106 Wohnort: Pietling in Oberbayern / Deutschland
|
Verfasst am: 03.10.2005, 11:43 Titel: Werte ausschließen? |
|
|
Hi,
ich hab ein Listing aus einem Mathebuch, das eine Geradengleichung berechnet, etwas modifiziert. Ein Teil davon sieht etwa so aus:
Code: | INPUT "x1 eingeben"; x1
INPUT "y1 eingeben"; y1
INPUT "x2 eingeben"; x2
INPUT "y2 eingeben"; y2
|
Nun möchte ich verhindern, dass Eingaben, die keine Zahlen sind, angenommen werden, also bei Buchstaben oder anderen Zeichen eine Fehlermeldung ausgegeben wird. Wie geht das? |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 03.10.2005, 12:03 Titel: |
|
|
QB-MonsterFAQ auf QBasic.de
Du musst dir wenn dus ganz eng machen willst ne eigenen Input-Routine schreiben. Aber eigentlich reicht das so wie du's hast, Werte, die keine Zahlenwerte sind werden nicht akzeptiert. QB-Input konvertiert halt zum Beispiel .5E-3 was ausgeschrieben 0,0005 wäre oder auch &h11 was im dezimalsystem 17 entsprechen würde. Also in den Variablen ist am Ende auf jeden Fall eine Zahl. nur du hast halt sehr viele möglichkeiten zur Eingabe.. _________________ "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 |
|
|
JJ2005
Anmeldungsdatum: 29.09.2005 Beiträge: 11 Wohnort: Brüssel
|
Verfasst am: 03.10.2005, 13:11 Titel: Re: Werte ausschließen? |
|
|
s-m-n hat Folgendes geschrieben: | Hi,
ich hab ein Listing aus einem Mathebuch, das eine Geradengleichung berechnet, etwas modifiziert. Ein Teil davon sieht etwa so aus:
Code: | INPUT "x1 eingeben"; x1
INPUT "y1 eingeben"; y1
INPUT "x2 eingeben"; x2
INPUT "y2 eingeben"; y2
|
Nun möchte ich verhindern, dass Eingaben, die keine Zahlen sind, angenommen werden, also bei Buchstaben oder anderen Zeichen eine Fehlermeldung ausgegeben wird. Wie geht das? |
Geht unter Windows mit subclassing von edit-controls. _________________ <a href="http://esl.jrc.it/envind/dashbrds.htm">The Dashboard - Basic forever!</a> |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 03.10.2005, 17:12 Titel: |
|
|
Hallo!
Gibt es das Problem noch?
Wenn ja, arbeite doch bei der INPUT mit Strings!
Ungefähr so:
Code: |
INPUT "x1: ",x1.string$
x1=val(x1.string$)
|
Greetings,
Mao |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.10.2005, 18:14 Titel: |
|
|
Aber wenn man 0 eingibt (ist ja bekanntlicher Weise eine Zahl) erhält man das selbe
Ergebnis wie zum Beispiel bei "SDGKFAUZF", das ist das Problem.
jb |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 03.10.2005, 19:24 Titel: |
|
|
Hallo!
@jb: Stimmt! Daran hatte ich nicht gedacht!
Dann wär's wohl das Beste, sich eine Eingabeschleife zu basteln, in der nur Zahlen und Kommas zugelassen sind. Gab's auch vor kurzem hier im Forum. Ich glaube die hatte Dusky_Joe geschrieben.
Greetings,
Mao |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.10.2005, 19:57 Titel: |
|
|
Oder bei 0 halt testen, ob auch nur 0 enthalten ist, so etwa:
Code: |
Zahl = 1
IF VAL(Eingabe$) = 0 THEN
FOR i = 1 TO LEN(Eingabe$)
IF MID$(Eingabe$, i, 1) <> "0" THEN Zahl = 0: EXIT FOR
NEXT I
IF Zahl THEN
PRINT "Die Eingabe ist eine Zahl!"
ELSE
PRINT "Du sollst ne Zahl eingeben, du Quatschkopf!"
END IF
END IF
|
jb |
|
Nach oben |
|
|
s-m-n
Anmeldungsdatum: 03.10.2005 Beiträge: 106 Wohnort: Pietling in Oberbayern / Deutschland
|
Verfasst am: 03.10.2005, 20:41 Titel: |
|
|
Erstmal danke an alle! jb, dein letztes Posting scheint interessant zu sein. Ich hab nur vorher vergessen zu schreiben, dass ich ein totaler Neuling bin und gestern erst mit diesem Codebeispiel angefangen hab zu Programmieren. Es wäre also nett, wenn ihr mir das ganze einsteigerfreundlich erklären könntet! Und die 0 soll erlaubt sein, genau so wie negative Zahlen. Es handelt sich um ein Programm zum Berechnen von Geradengleichungen, das muss auch Punkte wie P (0|2) oder Q (-1|4) verarbeiten können. Danke für alles!
Gruß
S-M-N |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.10.2005, 21:36 Titel: |
|
|
OK, dann hier mal ein vollständiger Code (der auch das Minuszeichen akzeptiert!) mit Erklärungen.
Code: |
' Diese Variable bestimmt, ob die Eingabe in Ordnung ist:
OK = 1
' Gebe einen String ein:
LINE INPUT Wort$
' Scanne jedes Zeichen von Wort$ ab
' (Das Minuszeichen darf nur einmal und am Anfang vorkommen, sonst nur Zahlen!)
FOR i = 1 TO LEN(Wort$)
' Scanne das aktuelle "großegeschriebene" Zeichen
SELECT CASE UCASE$(MID$(Wort$, i, 1))
' Das Minuszeichen
CASE "-"
' kommt es an der ersten Stelle vor?
IF i = 1 THEN OK = 1 ELSE OK = 0
' Die Buchstaben "A" bis "Z"
CASE "A" TO "Z"
OK = 0
END SELECT
NEXT i
' Ist alles in Ordnung?
IF OK THEN
PRINT "Der eigegebene String war eine Zahl!"
ELSE
PRINT "Der eigegebene String war keine Zahl!"
END IF
|
Schau aber zu den grundsätzlichen Sachen bitte in die MonsterFAQ.
Die wichtigsten Befehle sind:
Code: |
- FOR/NEXT
- SELECT CASE
- MID$()
- UCASE$()
|
Wenn du unter QuickBASIC den Befehl eingibst, und [wenn du den Cursor darauf hältst] F1 drückst,
erhältst du eine kurze Erklärung.
So, ich hoffe, ich konnte das ein bisschen verständlicher machen
jb |
|
Nach oben |
|
|
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 03.10.2005, 22:33 Titel: |
|
|
Ich habe für Win32 und DOS (CVS HEAD) die INPUT-Routine neu geschrieben. Ich habe mir überlegt, ob ich nicht vielleicht eine Call-Back-Funktion erlauben soll mit der der Programmierer selbst definieren kann, welche Zeichen an welcher Stelle des Textes erlaubt sein sollen. Allerdings müsste dann diese INPUT-Routine allgemein verwendet werden (also auch Linux und XBOX).
Gruß,
Mark |
|
Nach oben |
|
|
|