www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf liefert immer "inf)"


Autor: Flea (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte eine Fließekommazahl als String ausgeben. Wenn ich in der 
Funktion die Zahl die augegeben werden soll, fix zuweise (Code-Beispiel 
1), funktioniert das auch. Will ich jedoch eine Zahl aus einer globalen 
Struktur mir ausgeben lassen, geht das nicht.

Code-Beispiel 1:

double zahl = 20.003;
unsigned char string_buffer[16];

sprintf(string_buffer, "%.3f", zahl);

lcd_puts(arial10, string_buffer);

--> Ergebnis: "20.003"


Code-Beispiel 2:

double zahl = glob_struktur.zahl;
unsigned char string_buffer[16];

sprintf(string_buffer, "%.3f", zahl);

lcd_puts(arial10, string_buffer);

--> Ergebnis: "inf("


Den String gebe ich auf einem LCD-Display aus.
Die Variable in der globalen Struktur ist auch vom Typ float.

Ich habe alle Linker-Optionen für die Verwendung der 
Float-Funktionalität von sprintf wie im Tutorial angepasst.

Hat sonst noch jemand eine Idee, was die Ursache für mein Problem sein 
könnte?

Schon mal danke im Vorraus.

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im zweitem Beispiel solltest du 'zahl' qualifiziert aufrufen.

Gruss

Robert

Autor: Flea (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das heißt konkret?

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zahl wird nicht gelesen, weil es  in glob_struktur verpackt ist.
Gruss
Robert

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>double zahl = glob_struktur.zahl;
>--> Ergebnis: "inf("

Und was steht in glob_struktur.zahl?
Versuch doch mal:

glob_struktur.zahl= 10.0;
double zahl = glob_struktur.zahl;

Autor: Flea (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Bei der Berechnung von glob_struktur.zahl ist ein Fehler unterlaufen:
Die Zahlen wurden dabei nicht als float interpretiert:
glob_struktur.zahl = 1/16;

Richtig:
glob_struktur.zahl = 1/16.0f;

Als Ergebnis kam da immer 0 raus und sprintf hat "inf" (-> 
infinitessimal) ausgegeben.

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.