PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++: double einscanen



nobody0
22-09-2002, 00:25
Gerade ist mir aufgefallen, dass beim Einscanen eines double-Wertes durch den für scanf nötigen cast auf float (ansi-scanf kennt kein double) der eingescante Wert auf 0 gesetzt wird:

ohne cast:
sscanf(line,"%e",&tmp_float) liefert den korrekten Wert von 1.070

mit:
sscanf(line,"%e",&((float)tmp_double)) liefert den falschen Wert von 0.000

Wieso verschwinden denn die eingescannten Werte durch den cast? :confused:

Und wie kann ich double-Werte einscanen? :confused:

nobody0
22-09-2002, 00:29
Nachtrag: wenn ich einen double-Wert ohne cast angebe, gibt der Compiler ein Warning deswegen und aus dem Wert 1.070 werden 5.266445e-315, also deutlich zu wenig.

nobody0
22-09-2002, 00:38
Hat sich inzwischen erledigt, denn mit %le scant sscanf auch double ein. Komische Konstruktion, weil %le für prinftf ein long double - Wert ist und ich letztlich mit sscanf die Werte einlese, die ich vorher mit fprinft ausgegeben habe, so dass logischerweise dieselbe Bezeichung für dasselbe Format verwendet werden sollte, aber da haben wohl spitzfindige Theoretiker den Programmierer mit dem Scheinargument, dass es sich einmal um ein Ausgabe-Format und einmal um ein Eingabe-Format handelt, einen Streich gespielt, der immer noch nicht beseitigt ist :mad: