www.mikrocontroller.net

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


Autor: Daniel H. (Firma: keine) (commander)
Datum:

Bewertung
0 lesenswert
nicht 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:
if(lhys<0)
  sprintf(out,"LO %02d",lhys);
else
  sprintf(out,"LO  %02d",lhys);
              
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

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So?
if(lhys<0)
  sprintf(out,"LO -%02d",-lhys);
else
  sprintf(out,"LO  %02d",lhys);

Autor: Daniel H. (Firma: keine) (commander)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh -.-

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

Gruß,
Daniel

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>
int main(void)
{
        int i = -1;
        printf( "%05d\n", i);
        return 0;
}

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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.