Problem mit atoi() in C

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren