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


von Thomas (Gast)


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

von crazy horse (Gast)


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.

von Jörg Wunsch (Gast)


Lesenswert?

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

von Thomas (Gast)


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...

von Jörg Wunsch (Gast)


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?

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.