www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit atoi() in C


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin gerade dabei, mir einen Drehzahlmesser für mein Mopped zu stricken.
Der Radumfang soll dabei eingestellt werden können und das Ganze wird
dann am LCD-Display angezeigt.
Beim Einstellen liegt mein Problem:
Mit einer Taste soll der Cursor auf dem Display weitergestellt werden,
mit dem anderen Taster diese Stelle um 1 erhöht werden.
So, meine entsprechende Routine sieht so aus:

char wert[5];
sprintf(wert, "%hu", umfang);
if (wert[position - 1] < '9')
   wert[position - 1] = wert[position - 1] + 1;
else wert[position - 1] = '0';
umfang = atoi(wert);
set_pos(0x48);
sprintf(wert, "%hu", umfang);
show_text(wert);

set_pos setzt den Cursor auf eine Stelle (das Weiterrücken wird noch
woanders gemacht); position ist die Stelle des Cursors die durch
drücken des anderen Tasters erhöht wird.
Das Problem liegt nun darin, dass, wenn ich die erste Stelle auf null
stelle, der beispielsweise 4-stellige Umfangswert 3-stellig wird. Wird
wohl an der atoi() Funktion liegen da dann eine führende 0 ignoriert
wird.
Vielleicht hat ja hier jemand eine einfache Lösung, ansonsten müsste
ich ja wieder etliche Fallunterscheidungen machen....

MfG
Thomas

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sprintf(wert, "%hu", umfang);

hm, was heisst denn das h? Kenne ich nicht.
Kannst aber die Feldbreite der Ausgabe einstellen:

sprintf(wert, "%4u", umfang);
erzwingt eine 4stellige Ausgabe, ist die Zahl kleiner, werden
Leerzeichen ausgegeben.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der `h'-Modfier bezeichnet eine `half width' (integer) Variable, als
einen short.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der Feldbreite ist ja nicht schlecht, leider wird der Wert immer
linksformatiert in den String geschrieben.
Gibt es da irgendeinen Befehl um das zu erledigen? Habe da bis jetzt
noch nichts gefunden. (C-Neuling ;-)
Wird wohl doch auf eine ganz andere Lösung hinauslaufen...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist Dein printf kaputt, linksbündig sollte nur mit dem
Minuszeichen als Flag passieren (%-hu).

Was für ein Compiler/Bibliothek ist das denn?

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.