DAU-Fragen

Für allgemeine Fragen zur Programmierung mit PureBasic.
pbdau
Beiträge: 9
Registriert: 21.10.2004 11:01
Wohnort: München

DAU-Fragen

Beitrag von pbdau »

:shock:
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?
Benutzeravatar
Rob
Shadow Admin
Beiträge: 258
Registriert: 26.08.2004 01:39
Kontaktdaten:

Beitrag von Rob »

zahl.l = Val(string.s)

In der Hilfe zu den Strings zu finden.

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
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

such dir bitte in zukunft, eine etwas passendere überschrift.

p.s.: willkommen im forum.

c ya,
nco2k
pbdau
Beiträge: 9
Registriert: 21.10.2004 11:01
Wohnort: München

wie stelle ich sicher, dass wirklich eine zahl eingegeben wi

Beitrag von pbdau »

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?
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

indem der wert der zahl, kleiner als <10 sein muss ?!

c ya,
nco2k
pbdau
Beiträge: 9
Registriert: 21.10.2004 11:01
Wohnort: München

äh

Beitrag von pbdau »

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 ...
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

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. ;)

Beispiel:

Code: Alles auswählen

StringGadget(0, 20, 20, 300, 25, "", #PB_String_Numeric)
Dabei wird also ein Stringgadget mit der ID = 0 an der Stelle 20, 20 erstellt in das man nur Zahlen eingeben kann.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

@pbdau
achso... sags doch gleich. :lol:

c ya,
nco2k
Benutzeravatar
Rob
Shadow Admin
Beiträge: 258
Registriert: 26.08.2004 01:39
Kontaktdaten:

Beitrag von Rob »

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:

Code: Alles auswählen

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
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

:D Warum so kompliziert? :D
Schreib doch einfach einen Hinweis:
"NUR ZAHLEN dürfen eingegeben werden! Andernfalls wird das Eingeben von Buchstaben falsche Ergebnisse zur Folge haben!" ... :) oder so...
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Antworten