Problem mit atoi() in C

Gast #97753
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
Gast
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.
Gast
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...
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.