Stefan B. schrieb:> ../test_atof.c:12: warning: format '%.3f' expects type 'double', but> argument 3 has type 'float'
man sollte Warnungen nicht ignorieren, so eine schon gar nicht!
Walter schrieb:> man sollte Warnungen nicht ignorieren, so eine schon gar nicht!
Ist doch egal, er schrieb doch kein Fehler.
Hat denn keiner ne Idee? :-(
hp-freund schrieb:> Äh, wie jetzt?> Lesen lernen?> Hobby wechseln?
Troll??? Das Problem ist immer noch nicht gelöst.
Von deinem unnötigem Quellcode und "math.h" (lol!) und sinnlosen Fragen
wird auch nichts besser Du verschendest blos meine Zeit.
hm schrieb:> Walter schrieb:>> man sollte Warnungen nicht ignorieren, so eine schon gar nicht!>> Ist doch egal, er schrieb doch kein Fehler.
Du musst noch viel lernen.
hp-freund schrieb:> Hast Du die stdlib.h und math.h eingebunden?> So klappts:
Zähl mal zusammen, wieviele Zeichen da so ungefähr beim sprintf zusammen
kommen werden und dann schau dir die Array-Definition noch einmal an.
hm schrieb:>> Ist doch egal, er schrieb doch kein Fehler.>> Hat denn keiner ne Idee? :-(
Wenn dir die Lösung wichtig ist, dann liegt es an dir, genügend Infos zu
geben, damit man den Fehler reproduzieren kann. Deine bisherigen Infos
reichen dafür nicht aus.
Mit deinen bisherigen Infos plus notwendigen und gezeigten Ergänzungen,
weil dein Code allein nicht lauffähig ist, können von anderen Programme
für ein universelles und ein spezielles Target erstellt werden, die
richtig funktionieren.
Der Fehler liegt also in einem von dir nicht gezeigten Detail.
> Troll??? Das Problem ist immer noch nicht gelöst.> Von deinem unnötigem Quellcode und "math.h" (lol!) und sinnlosen Fragen> wird auch nichts besser Du verschendest blos meine Zeit.
Ich meine wahrscheinlich auch :-(
hm schrieb:> Troll??? Das Problem ist immer noch nicht gelöst.> Von deinem unnötigem Quellcode und "math.h" (lol!) und sinnlosen Fragen> wird auch nichts besser Du verschendest blos meine Zeit.
Du solltest mal deine Arroganz ablegen und Hinweise anderer und die des
Compilers nicht ignorieren. Außerdem ein kompletes Programm posten, das
den Fehler zeigt, statt nur ein paar hingerotzte Code-Fragmente.
Wer Hilfe sucht und dabei so pampig ist, verdient eigentlich keine
Antwort.
hm schrieb:> Troll??? Das Problem ist immer noch nicht gelöst.> Von deinem unnötigem Quellcode und "math.h" (lol!) und sinnlosen Fragen> wird auch nichts besser Du verschendest blos meine Zeit.
Und du unsere.
Rolf Magnus schrieb:> Wer Hilfe sucht und dabei so pampig ist, verdient eigentlich keine> Antwort.
Wer bist Du denn bitte? Meine Reaktion war völlig angemessen auf
Bemerkungen
wie
"Äh, wie jetzt?
Lesen lernen?
Hobby wechseln?"
Sowas ist einfach Schwachsinn. Vor allem vor dem Hintergrund seiner
Vorpostings, die nur meine Zeit verschwenden.
Karl heinz Buchegger schrieb:> Zähl mal zusammen, wieviele Zeichen da so ungefähr beim sprintf zusammen> kommen werden und dann schau dir die Array-Definition noch einmal an.
Guck mal die Zeile "//j=2.345;"
Das hatte ich zum Test eingebaut. Wenn der float im Code direkt
definiert wird ist alles ok.
Der Fehler tritt also schon an der Stelle
char zahl[]="2.123";
double n = atof (zahl);
float j= (float)n;
also bei atof oder beim float casten auf. Das sprintf tut was es soll.
MfG!
hm schrieb:> Der Fehler tritt also schon an der Stelle
Dein Fehler ist hier von niemandem reproduzierbar.
Hauptsächlich deshalb, weil du kein komplettes Progamm postest, sondern
aussagenlose Fragmente aus denen man nicht spezifisches entnehmen kann.
> char zahl[]="2.123";> double n = atof (zahl);> float j= (float)n;>> also bei atof oder beim float casten auf.
wetten nicht.
Du siehst die Symptome und verwechselst sie mit der Ursache. Das ist
alles.
Wenn du endlich ein komplettes Programm posten würdest, könnte man
besser analysieren, was faul ist.
Denn des öfteren steckt der Fehler eben nicht dort, wo du ihn vermutest,
sondern ganz woanders.
Karl heinz Buchegger schrieb:> hp-freund schrieb:>> Hast Du die stdlib.h und math.h eingebunden?>> So klappts:>> Zähl mal zusammen, wieviele Zeichen da so ungefähr beim sprintf zusammen> kommen werden und dann schau dir die Array-Definition noch einmal an.
Tut mir leid hp-freund.
Ich hab beim lesen den sprintf mit dem printf durcheinandergewürfelt.
Die Buffergröße beim sprintf ist natürlich ok.
Karl heinz Buchegger schrieb:> Wenn du endlich ein komplettes Programm posten würdest, könnte man> besser analysieren, was faul ist.
Das geht leider nicht, aber werde am Montag mal eine Minimalprogramm
testen und debuggen.
Dachte es handelt sich hier um irgendeinen Käsefehler, der schnell
beantwortet ist.
arrrrgproblemaaarrrggg schrieb:> float j= (float)n;> //j=2.345;> sprintf(ausgabe, "%.3f", j);
Welchen Datentyp erwartet (s)printf bei Angabe
des Formatspezifizierers %f?
%f spezifiziert double.
Welchen Datentyp übergibst Du hier?
float.
Was geht in die Hose? sprintf nimmt sich einen double vom Stack,
auch wenn da keiner steht. Also wird Dein float mit irgendwelchem
Krempel gemischt und das Resultat als double interpretiert.
Probier mal
> sprintf(ausgabe, "%.3f", n);
aus und lass die Umwandlung zu float einfach weg.
(Wenn Du allerdings einen Compiler verwendest, für den double
dasselbel ist wie float, wie z.B. beim AVRGCC, dann liegt ein komplett
anders geartetes Problem vor)
Rufus Τ. Firefly schrieb:> aus und lass die Umwandlung zu float einfach weg.
langsam, ich wiederhole mich.
mit j=2.345; funktioniert alles. also kein problem mit sprintf.
und ja avrgcc.
Rufus Τ. Firefly schrieb:> (Wenn Du allerdings einen Compiler verwendest, für den /double/> dasselbel ist wie float, wie z.B. beim AVRGCC, dann liegt ein komplett> anders geartetes Problem vor)
Rufus du verrennst dich hier.
Die Warnung ist zwar nett, aber unnötig, da bei variadischen Funktionen
ein float sowieso automatisch auf einen double promoted wird. Das hat
sich m.W. auch in C99 nicht geändert.
hm schrieb:> Sowas ist einfach Schwachsinn. Vor allem vor dem Hintergrund seiner> Vorpostings, die nur meine Zeit verschwenden.
Sie verschwenden nur deshalb deine Zeit, weil du nicht verstanden hast,
warum sie geschrieben wurden.
Andere haben sich die Mühe gemacht, aus deinem Code-Fragement ein
komplettes Programm zu bauen und auszuprobieren und haben festgestellt,
daß es funktioniert. Also kann es nur zwei Möglichkeiten geben: Entweder
deine Compiler-Installation ist kaputt, oder der Fehler ergibt sich erst
durch Teile des Programms, die du uns verheimlichst.
Das allermindeste, was du hättest tun können, wäre entweder ein
minimales, aber komplettes Programm zu posten, bei dem der Fehler
auftritt, so daß andere ihn nachstellen können, oder eines der Programme
der anderen ausprobieren und schauen, ob es bei dir auch den Fehler
erzeugt.
Was du stattdessen gemacht hast, ist Leute hier zu verärgern, so daß sie
keine Lust mehr haben, dir zu helfen.
Rufus Τ. Firefly schrieb:> Was geht in die Hose? sprintf nimmt sich einen double vom Stack,> auch wenn da keiner steht.
So einfach ist es dann doch nicht. Bei variablen Argumentlisten wird
float automatisch nach double konvertiert.
Ich hab mal meine Glaskugel angeworfen, und sie meint, es liegt, wie
schon in der allerersten Antwort vermutet, an einem nicht inkludierten
Header (plus ignorierter Warnung), so daß der Compiler implizit annimmt,
daß atof() int zurückgibt.
Karl heinz Buchegger schrieb:> Rufus Τ. Firefly schrieb:>>> (Wenn Du allerdings einen Compiler verwendest, für den /double/>> dasselbel ist wie float, wie z.B. beim AVRGCC, dann liegt ein komplett>> anders geartetes Problem vor)>> Rufus du verrennst dich hier.
OK, dann streiche meinen Beitrag.
Mir erschien das hin- und her-casten nur etwas wirr und unnötig.
Deine Glaskugelvermutung dürfte (wie so oft) ins Schwarze treffen.
Rufus Τ. Firefly schrieb:> Mir erschien das hin- und her-casten nur etwas wirr und unnötig.
das sowieso.
> Deine Glaskugelvermutung dürfte (wie so oft) ins Schwarze treffen.
Ich denke Rolf hats geknackt.
hm hat ja schon hinlänglich gezeigt, dass ihn Warnungen nicht
interessieren. Das von Rolf skizzierte Szenario ist eine mögliche und
sehr plausible Variante dessen, was schief gelaufen sein könnte.
Rolf Magnus schrieb:> Was du stattdessen gemacht hast, ist Leute hier zu verärgern, so daß sie> keine Lust mehr haben, dir zu helfen.
Ich versteh deine Kritik, wie gesagt, ich ging von einem Käsefehler aus
und hab noch kein Minimaprogramm getestet, sonst hätte ich das gepostet.
Ferner kreidest Du mir an das ich auf
"Äh, wie jetzt?
Lesen lernen?
Hobby wechseln?"
entsprechend reagiere. Dazu sag ich nur "wie man in den Wald ruft"
Wenn das irgendwen verägert, ist mir das auf gut deutsch gesagt s....
egal Ich habe genug Freunde.
MfG!
hm:
Du hast nicht gesagt was für ein Kompiler nutzt oder welche uC....
Bist du sicher daß double and float sind nicht gleich ? (4 byte).... Du
kannst einfach deine Variabel verfolgen... und 4 hex bytes per UART
senden und sehen wo es überschrieben ist... (oder gar nicht
initializiert).
Heute ist Mittwoch :) Wo ist die Quellcode ? ;-)