Hallo zusammen,
ich weiss nicht warum das so ist?
Ich lege einen Wert in einer Variablen (Hygro) ab und etwas später will
ich diese Variable weiter verwenden aber der Inhalt hat sich verändert.
Diese Variable wird nirgens weiter angefasst. Ich stell mal den Code und
die Ausgabe vom Terminal rein. Vielleicht fällt Euch Profis ja mein
Fehler auf.
Die Stellen die ich meine habe ich so "<<<<<<<<<<<<<<" gekennzeichnet.
Wenn ich die Variable später berechnen würde hätte ich zwar ein
korrektes Ergebnis. Aber ich würde gerne verstehen warum das so ist.
Evtl kommt dieses Problem na noch öfter vor.
Das geht durch den Compiler?
Tempc = Str(tempc)
For I = 0 To Len(tempc)
If I = Len(tempc) Then
tempc ist doch ein WORD und kein String
Dim Tempc As Word
Was liefert Len, wenn man es auf einen WORD ansetzt?
Wie speichert sich der String, der von STR erzeugt wird in tempc?
Meine BASCOM Kentnisse sind allerdings beschränkt, möchte ich gleich
dazu sagen. Ist mir nur aufgefallen und unlogisch vorgekommen. Wenn
Variablen ihren Wert unmotiviert verändern, dann sind Array-Überläufe
oder eben String-Überläufe immer heiße Kandidaten. Drum hab ich mir die
String-Operationen genauer angesehen.
Hallo,
habs nicht weiter durchgelesen. ABER genau das, was mein Vorredner
sagte, scheint durchaus zuzutreffen. Den Effekt kenn ich aus meinen
Anfangszeiten sehr gut und du suchst Dir nen Wolf dran.
Wenn ein String "überläuft", dann werden nachfolgende Speicherzellen, wo
andere Variablen liegen, rücksichtslos überschrieben und damit ihr Wert
verändert.
Da Du den String (also die Variable, die den STring aufnehmen würde)
weiter vorne im Speicher liegen hast, deutet es sehr darauf hin. Wundert
mich aber, daß dann auch nicht andere Variablen betroffen sind, oder
fällt es vielleicht einfach nur nicht auf.
Versuche als Test mal den STring ganz am Schluß der ganzen Variablen zu
deklarieren oder besser, schau, daß er nicht überläuft.
Daß der Compiler nicht meckert, wundert mich allerdings auch!
Viel Erfolg
Ja Moin zusammen,
Der Compiler hat tatsächlich nicht gemeckert und ihr hattet recht.
1
Print Tempc
2
tempc = Str(tempc)
3
Print Tempc
4
Print Len(tempc)
brachte folgende Ausgaben:
185 < print tempc
14385 < print tempc nach tempc = str(tempc)
3 < len(tempc)
Warum die folgende Schleife dann da einen lesbaren String daraus gemacht
hat weiss ich nicht.
Nachdem ich dem String eine neue Variable spendiert habe(von Typ String)
stimmen die beiden Werte überein.
Ich stehe noch ganz am Anfang meiner AVR Basic Programmier Erfahrungen.
Deshalb sieht der Code noch etwas wirr aus und funktioniert eben
manchmal nicht :-).
Danke für die Hilfe, tolles Forum !!!.
Gruß Marcel