Umwandlung von string in integer

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Snade

Betreff: Umwandlung von string in integer

BeitragMo, Dez 30, 2013 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Das Programm soll einen Tannenbaum aus beliebigen ascii Zeichen darstellen, das klappt soweit auch ganz gut, allerdings nur für zahlen bis 9, welche in der Variable one% gespeichert sind.
Problem: Wenn ich eine Zahl über 9 eingebe (am Anfang beim Input, z.B. 31, 43), wird gar nichts mehr angezeigt, lege ich die Variable aber selber fest (one% = 31) funktioniert alles.

Denke es hat irgendwas mit der Umwandlung von string in integer zu tun, weiß aber nicht genau in welcher Form.

Wie mache ich es richtig, so dass eine Eingabe über 9 (i.Allg. zweistellig) ebenfalls möglich ist?
Am besten ohne extra input-routine.

BlitzBasic: [AUSKLAPPEN]
Graphics 1024,768

tree_view$ = Input$("Baumaussehen und Groesse angeben (z.B.: 3 # %): ")


one% = Mid(tree_view$, 1, 2)
;one% = 31, so würde das Programm funktionieren
two$ = Mid(tree_view$, 3, 1)
three$ = Mid(tree_view$, 5, 1)

drawTree(one%, two$, three$)


WaitKey
End

Function drawTree(leaves_count%, stem_sign$, leave_sign$)
For i = 1 To leaves_count% Step 2
x = ((leaves_count%-i)/2) ;abstand zu den seiten berechnen
For j = 1 To x
Write " "
Next
For y = 1 To i
Write leave_sign$
Next
Print
Next

For l = 1 To ((leaves_count%-2)/2)
Write " "
Next

For m = 1 To 3
Write stem_sign$
Next
End Function

Tennisball

BeitragMo, Dez 30, 2013 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Deine Vermutung ist leider falsch, das hat mit der Konvertierung von String nach Integer nichts zu tun. Das Problem liegt in diesem Codeabschnitt:

BlitzBasic: [AUSKLAPPEN]
one% = Mid(tree_view$, 1, 2)
two$ = Mid(tree_view$, 3, 1)
three$ = Mid(tree_view$, 5, 1)

der Variable one% wird dabei das erste Zeichen des eingegebenen Strings zugewiesen. Bei "32" wäre das z.B. "3". Da sich die restliche Eingabe dadurch auch verschiebt, liest du für two$ und three$ ein " " aus, was darin resultiert, dass du später nichts siehst.
Also musst du die Eingabe in drei Teile auftrennen, jeweils separiert durch " ". Schau dir dazu mal den Befehl InStr an; Damit solltest du das Problem lösen können.

Gruß,
Tennisball

Snade

BeitragMo, Dez 30, 2013 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tennisball

Danke das mit der Verschiebung habe ich übersehen Smile

Xeres

Moderator

BeitragMo, Dez 30, 2013 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst nicht einfach davon ausgehen, dass der Eingabestring X Zeichen lang ist - jedenfalls, wenn du den Benutzer nicht darauf hin weißt, das ein bestimmtes Muster nötig ist um sicher zu stellen, dass die ersten Zeichen Zahlen sind.

Am schnellesten ginge es, drei mal Input auf zu rufen und die eingaben separat ein zu lesen: macht keine Probleme den Quatsch wieder auseinander zu popeln.
Ansonsten muss du ein Trennzeichen definieren, dessen Position bestimmen und die richtigen Teile des Strings abschneiden.

Und zu guter Letzt der Hinweis: Man kann einfach von String zu Int casten. Die Zahl wird bis zum ersten Buchstaben erkannt.
BlitzBasic: [AUSKLAPPEN]
tree_view$ = "31 # %"
one% = Int(tree_view$) ; Explizites casten
Print("(1) = "+one%)
WaitKey
End
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group