Hallo, ich bin ein absoluter pb-neuling. Werde euch wahrscheinlich demnächst öfters nerven.
Also, hier meine ersten Fragen:
Ich habe an einem Beispiel gesehen, dass man über die Konsole per input() Strings Zeichen eingeben kann. Wie kann ich nur Zahlen eingeben (Variablen?) und z.B. prüfen, ob die Zahl maximal zweistellig ist? Gibt es dazu einen eigenen Befehl?
Wie heisst der Befehl in der grafischen Benutzeroberfläche?
Die Länge der Zahl ist maximal zweistellig, wenn der Wert <100 liegt. Logisch
Hast du sie als String, kannst du Len(zahl.s) nehmen. Wieder: siehe Hilfe.
Und willkommen im Forum.
Build a man a fire and he's warm for a day. Set a man on fire and he's warm for the rest of his life
Vielen Dank, werde mich bemühen, in Zukunft sinnvolle Titel zu erstellen.
und wie kann ich sicherstellen, dass wirklich nur eine zahl eingegeben werden kann?
sei mir bitte nicht beleidigt, aber das verstehe ich jetzt nicht ganz.
Mein Problem: Ich möchte ein kleines Tool erstellen, dass Celsius in Fahrenheit umrechnet usw. D.h. ich muss positive / negative Zahlen von -174 Grad bis zu -zig Millionen Grad eingeben können, darf aber keine Buchstaben in der Eingabe haben, da sonst ja das Rechenergebnis falsch ist. Die Rechenfunktion kriege ich schon hin. Mein Problem ist sozusagen die "Sicherheitsabfrage", dass wirklich nur Zahlen eingegeben wurden. Das mit der Längenbegrenzung habe ich auch verstanden. Buchstaben (z.B. j/n) abfragen mit if ist auch nachvollziehbar. Aber wie man Zahlen daraufhin überprüft, dass wirklich nur Zahlen eingegeben wurden ...
Wenn es ein Tool wird, dann ist es wohl auf einer Fensteroberfläche oder? Also ein Fensterprogramm und kein Screenprogramm.
Dann verwendest du wohl für die Eingabe ein Stringgadget oder? Bei diesen Gadgets kannst du als Flag angeben, dass nur Zahlen eingegeben werden können.
Wenn es dagegen in der Konsole, dem "DOS-Fenster", abläuft, könntest du den String Zeichen für Zeichen durchgehen (parsen) und alles was Buchstabe ist rausschmeissen bzw. nur die ersten Zeichen, die zahlen sind, übernehmen. Das sähe dann so aus:
Procedure.s NurZahlen(string.s)
l = Len(string) ; Länge des Strings
; i geht jetzt von 1 bis l immer eins weiter und kann
; so als Index benutzt werden
For i = 1 To l
buchstabe.s = Mid(string, i, 1) ; einen Buchstaben extrahieren
; Ist das ASCII-Zeichen keine zahl und kein punkt? (siehe ASCII-Tabelle für die werte)
If (Asc(buchstabe) < 48 Or Asc(buchstabe) > 57) And Asc(buchstabe) <> 46
Break ; Raus aus der Schleife
EndIf
Next
; der Index i ist jetzt an dem punkt des ersten auftretens eines
; zeichens, das keine zahl ist.
; beim string 123abc wäre er jetzt bei a, also an Position 4.
; Nun alles vor dieser Position extrahieren und zurückliefern
ProcedureReturn Mid(string,1,i-1)
EndProcedure
OpenConsole()
string.s = Input() ; Gib zum testen z.b. 123.23absg ein
string = NurZahlen(string)
zahl.f = ValF(string) ; Val() für Integer, ValF() für Floats, also Kommazahlen wie 3.141
PrintN("") ; zeilenumbruch. geht nicht einfacher...
; Print() kann nur Strings ausgeben, also float-zahl mit StrF() wieder in String umwandeln
PrintN(StrF(zahl))
Input() ; Auf return-druck warten, damit das fenster auf bleibt
Build a man a fire and he's warm for a day. Set a man on fire and he's warm for the rest of his life
Warum so kompliziert?
Schreib doch einfach einen Hinweis:
"NUR ZAHLEN dürfen eingegeben werden! Andernfalls wird das Eingeben von Buchstaben falsche Ergebnisse zur Folge haben!" ... oder so...