Forum: Compiler & IDEs Negative Zahlen < -10 mit führender Null ausgeben lassen?


von Daniel H. (Firma: keine) (commander)


Lesenswert?

Hallo,

ich mal wieder. Ich versuche gerade mir das Leben leichter zu machen und 
per sprintf() Temperaturwerte so umzuwandeln, dass sie auf einem 
LCD-Display angezeigt werden können.
Dazu verwende ich momentan folgendes:
1
if(lhys<0)
2
  sprintf(out,"LO %02d",lhys);
3
else
4
  sprintf(out,"LO  %02d",lhys);
5
              
6
lcd_print(out);

Solange lhys >= 0 ist funktioniert es auch einwandfrei, sobald der Wert 
aber kleiner 0 wird (und er kann auch nur minimal -8 werden) wird eben 
keine führende Null mehr gezeigt, sondern nur noch "-1", "-2" usw..
Gefordert ist aber ausdrücklich, dass die Temperatur zweistellig gezeigt 
werden soll, inklusive Vorzeichen bei negativen Temperaturen.
Gibt es da einen Trick, mit dem man dies mit sprintf() bewerkstelligen 
kann?

Gruß,
Daniel

von Roland P. (pram)


Lesenswert?

So?
1
if(lhys<0)
2
  sprintf(out,"LO -%02d",-lhys);
3
else
4
  sprintf(out,"LO  %02d",lhys);

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Argh -.-

Vielen lieben Dank. Auf sowas simples wäre ich niemals alleine gekommen 
schäm

Gruß,
Daniel

von Roland P. (pram)


Lesenswert?

keine Ursache

> Auf sowas simples wäre ich niemals alleine gekommen

manchmal denkt man halt zu kompliziert und sieht den Wald vor lauter 
Bäumen nicht ;-)

Gruß
Roland

von Florian (Gast)


Lesenswert?

1
#include <stdio.h>
2
int main(void)
3
{
4
        int i = -1;
5
        printf( "%05d\n", i);
6
        return 0;
7
}

chef@localhost ~/0001 $ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2)
Copyright (C) 2006 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE 
ZWECKE.

chef@localhost ~/0001 $ gcc -o 1 1.c
chef@localhost ~/0001 $ ./1
-0001

chef@localhost ~/0001 $ equery l glibc
[ Searching for package 'glibc' in all categories among: ]
 * installed packages
[I--] [ -] sys-libs/glibc-2.5-r3 (2.2)

Bei mir zumindest funktioniert es.

Vielleicht mal eine neue libc ausprobieren?

von Peter D. (peda)


Lesenswert?

Daniel H. wrote:

> Solange lhys >= 0 ist funktioniert es auch einwandfrei, sobald der Wert
> aber kleiner 0 wird (und er kann auch nur minimal -8 werden) wird eben
> keine führende Null mehr gezeigt, sondern nur noch "-1", "-2" usw..
> Gefordert ist aber ausdrücklich, dass die Temperatur zweistellig gezeigt
> werden soll, inklusive Vorzeichen bei negativen Temperaturen.
> Gibt es da einen Trick, mit dem man dies mit sprintf() bewerkstelligen
> kann?

Ja.
Einfach mal richtig zählen.

Mit %02 sagst Du 2 Zeichen ausgeben, aber "-1" sind ja schon 2 Zeichen.
Für noch ne Null mußt Du mindestens %03 schreiben.


Peter

von Florian (Gast)


Lesenswert?

Außerdem:
   Die Zeichen fur die Flags
       Das Zeichen `%' wird von null oder mehr der folgenden Flags 
gefolgt:

       #      gibt an, dass der Wert in eine ``alternative Form'' 
gewandelt werden soll.  Bei der Umwandlung o wird  das  erste  Zeichen 
der
              Ausgabe  eine Null (indem `0' vorangestellt wird, wenn der 
Wert nicht schon Null war).  Bei den Umwandlungen x und X wird einem
              Ergebnis ungleich Null der String `0x' (oder `0X' bei X) 
vorangestellt.  Bei den Umwandlungen a, A, e, E, f, F, g und G enthalt
              das Ergebnis immer einen Dezimaltrennzeichen, auch wenn 
ihm keine Ziffern folgen.  (Normalerweise tritt ein Dezimaltrennzeichen
              nur in Ergebnissen auf, wenn ihm eine Ziffer folgt.)  Bei 
den Umwandlungen g und G werden nachfolgende  Nullen  nicht  aus  dem
              Ergebnis entfernt, wie sie es normalerweise wurden.  Fur 
andere Umwandlungen ist das Ergebnis undefiniert.

       0      Auffullen  mit  Nullen.   Bei den Umwandlungen d, i, o, u, 
x, X, a, A, e, E, f, F, g und G wird der umgewandelte Wert links mit
              Nullen, nicht mit Leerzeichen aufgefullt.  Werden sowohl 0 
als auch - angegeben, so wird 0 ignoriert.   Wenn  eine  Genauigkeit
              bei  einer numerischen Umwandlung (d, i, o, u, x und X), 
angegeben ist, wird das Flag 0 ignoriert.  Fur andere Umwandlungen ist
              das Ergebnis undefiniert.

       -      Linksbundige Ausgabe des umgewandelten Wertes an der 
Feldgrenze gesetzt wird.  (Standard ist rechtsbundige Ausrichtung.) 
AuBer
              bei der Umwandlung n wird der umgewandelte Wert rechts mit 
Leerzeichen aufgefullt statt links mit Leerzeichen oder Nullen.  Ein
              - ubersteuert ein 0 falls beide angegeben sind.

       ` '    (ein Leerzeichen) gibt an, dass ein Leerzeichen vor einer 
positiven Zahl bleiben soll, die durch einen  Vorzeichenwechsel  ent-
              standen ist.

       +      gibt  an,  dass vor alle durch Vorzeichenwechsel 
entstandenen Zahlen das Vorzeichen (`+' oder `-') gesetzt wird. 
StandardmaBig
              wird ein Vorzeichen nur fur negative Zahlen verwendet. Ein 
+ ubersteuert ein Leerzeichen, falls beide angegeben sind.


Falls Du für positive Werte kein Vorzeichen haben möchtest.

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.