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


von Flea (Gast)


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.

von R. F. (rfr)


Lesenswert?

Im zweitem Beispiel solltest du 'zahl' qualifiziert aufrufen.

Gruss

Robert

von Flea (Gast)


Lesenswert?

Das heißt konkret?

von R. F. (rfr)


Lesenswert?

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

von holger (Gast)


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;

von Flea (Gast)


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.

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.