Hallo, hätte gerne folgende Ausgabe: "+XX°" Wobei der Wertebereich von XX +90 bis -90 angezeigt werden soll. Es soll immer eine führende 0 angezeigt werden wenn der Wert einstellig ist. Außerdem soll das Vorzeichen + bzw. - angezeigt werden. Also z.B. so: +05° oder z.B. -09° Im positiven Bereich wird kein Vorzeichen angezeigt, im negativen Bereich wird das - angezeigt, aber dafür keine 0 wenn der Wert einstellig ist. Folgendes funktioniert nicht: sprintf(buffer_lcd,"%02d%c",temp_signed,248); Geht das mit printf überhaupt? Oder muss man sowas anders zusammenbauen?
Peter schrieb: > sprintf(buffer_lcd,"%02d%c",temp_signed,248); teste mal mit
1 | sprintf(buffer_lcd,"%c%02u%c",temp_signed<0?'-':'+',temp_signed,248); |
Hm, da werden jetzt wohl wieder ein paar gehässige Antworten folgen. Grundsätzlich solltest Du in diesem Forum solche Fragen etwas genauer formulieren: - Welche Plattform (welcher Micrcontroller) ? - Welcher Compiler ? - Welche verwendeten Libraries. Die ganze printf/sprintf Umgebung ist stark von der jeweiligen Umgebung/Implementation abhängig. Je mehr Funktionen printf/sprintf anbieten, je grösser sind die Libraries und je mehr Speicher wird verbraucht, was (vorallem in der Vergangeheit) natürlich ein wichtiger Punkt war/ist. Auf einem ausgewachsenen PC wäre Deine Frage schnell beantwortet:
1 | printf("%+02d %+02d",10,-10); |
Was Dein printf auf deinem System anbietet, musst Du leider selbst rausfinden. G D
Peter schrieb: > Folgendes funktioniert nicht: > sprintf(buffer_lcd,"%02d%c",temp_signed,248); Wenn Du das Vorzeichen immer mit dabei haben möchtest, möchtest Du drei Zeichen ausgeben, nicht zwei:
1 | printf("%+03d%c", temp_signed, 248); |
Daniel B. schrieb: > - Welche Plattform (welcher Micrcontroller) ? > - Welcher Compiler ? > - Welche verwendeten Libraries. für ein dem Standard entsprechend implementiertes printf() ist das alles unerheblich.
@Markus F.
Cool, wenn Du es besser weisst:
Code:
printf("%+02d %+02d\n",12003,-12003);
Output:
+12003 -12003
Man beachte: https://en.wikipedia.org/wiki/Printf_format_string ab dem
Paragraphen "Flags field"
Wenn Du schon mit Standards um Dich schlägst, solltest Du sie auch
kennen....
Daniel B. schrieb: > printf("%+02d %+02d\n",12003,-12003); Irrelevant, da die zu formatierende Zahl größer als die minimal vorgegebene Feldbreite ist.
1 | $ printf "%+02d %+02d\n" -85 5 |
2 | -85 +5 |
3 | $ printf "%+03d %+03d\n" -85 5 |
4 | -85 +05 |
Wie oben schon angemerkt worden ist, zählt das Vorzeichen mit zur Feldbreite dazu, sodass man diese als 3 angeben muss. Dann sollte es mit einem standardkonformen printf() wie gewünscht funktionieren.
Hat der Poster auch schon mal nachgeschaut, wieviel Platz das printf()-Monstrum im Controller verbraucht ? Irgendwann sollte man sich davon loesen...
Sapperlot W. schrieb: > Irgendwann sollte man sich davon loesen... Ja, vor allem sollte man sich von der Vorstellung lösen, dass printf() generell böse und zu vermeiden sei, nur weil die Zielplattform ein Controller ist. Auf einem solchen muss man natürlich zwangsweise masochistisch arbeiten und alles, was andere schon mal vor einem gebaut haben, ignorieren, damit man es durch eigene, neue Bugs ersetzen kann – die dann schweinisch effizient programmiert sind. (Wer Ironie findet, darf sie gern behalten.)
Sapperlot W. schrieb: > Hat der Poster auch schon mal nachgeschaut, wieviel Platz das > printf()-Monstrum im Controller verbraucht ? Irgendwann sollte man sich > davon loesen... Auf (m)einem Cortex M4 etwa 4k. Wüsste nicht, warum ich mich davon trennen sollte, nicht benutzter Flash gibt kein Geld zurück...
Sapperlot W. schrieb: > Hat der Poster auch schon mal nachgeschaut, wieviel Platz das > printf()-Monstrum im Controller verbraucht ? Auf dem AT90CAN128 sind das ~4kB, wen störts. Michrochip nimmt ungenutzten Flash nicht zurück.
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.