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