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
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.
Der `h'-Modfier bezeichnet eine `half width' (integer) Variable, als einen short.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.