www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik itoa terminiert keine Nullen


Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: emil (Gast)
Datum:

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

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.