Forum: Mikrocontroller und Digitale Elektronik itoa terminiert keine Nullen


von René (Gast)


Lesenswert?

Hallo Alle,

ich bins mal wieder.
Ich haben ein 4x20 Display mit der Peter Fleury lib. laufen. Wenn ich
jetzt den Wert einer Variablen auf dem Display ausgeben will sage ich:

lcd_gotoxy(14,0);
itoa(temp1,string1,10);
lcd_puts (string1);

Das Funktioniert ja vom Prinzip auch aber wenn die Zahl von bspw. drei
auf zwei Stellen schrumpft, dann bleibt halt eine parasitäre Null
stehen. Was mache ich falsch?

Vielen Dank schon mal an alle fleißigen Forianer.

Ciao René

von Thorsten (Gast)


Lesenswert?

Ich habe zwar nicht genau verstanden, was du meinst. Aber du kannst vor
Anwenden von itoa dein string1 z. B. mit memset auf 0 setzen. Also zum
Beispiel_

unsigned char string1[10];
...
memset(string1,0,10);
itoa(..);
lcd_puts(..);

Thorsten

von Rufus T. Firefly (Gast)


Lesenswert?

Das liegt nicht an itoa, sondern daran, daß - ohne das Display zu
löschen - nacheinander unterschiedlich lange Strings ausgegeben
werden.
Die "Reste" des längsten Strings bleiben so erhalten,

Werden nacheinander die Strings
"Apfelkuchen" und "Birne" ausgegeben, so steht auf dem Display
"Birnekuchen" ...

Abhilfe wäre hier das Auffüllen des Strings auf eine definierte Länge
oder aber das vorherige Ausgeben eines Strings mit der maximal zu
erwartenden Anzahl an Leerzeichen.

von emil (Gast)


Lesenswert?

ja, stimmt genau, was rufus sagt, ausserdem ist die itoa() "left
adjusted", also bleiben die "rechten" symbole eines alten strings
aufm display stehen

von René (Gast)


Lesenswert?

Hi @all,

danke für die schnellen Antworten. Welches ist denn die eleganteste
Lösung? Leider bin ich blutiger c Anfänger. Wenn ich so schreibe:

  lcd_gotoxy(14,3);
  memset(string4,0,10);
  itoa(temp4,string4,10);
  lcd_puts(string4);

dann geht es nicht.

Wie würde denn der Code aussehen wenn man den String auf eine
definierte Länge setzt.

Danke und Ciao

René

von René (Gast)


Lesenswert?

ich nochmal...

ich schreibe jetzt als erstes vier Leerzeichen und dan den neuen Wert.
So funktioniert es, aber man sieht es dem Werte an, er steht nämlich
leicht zitterig auf dem Display. Besser wäre eine Lösung  bei der man
nicht den ganzen Wert einmal löschen muss.

Danke im Voraus

René

von Rufus T. Firefly (Gast)


Lesenswert?

Dann bestimme doch die Länge des von itoa erzeugten Strings, rechne aus,
wieviele Leerzeichen fehlen und gib die nach dem Ausgeben des Strings
aus, wenn mehr als 0.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.