Ich versuche herauszufinden, warum ein größeres Problem auftritt, am Beispiel eines kleineren Programms. Dieses kleinere Programm funktioniert nicht, weshalb ich glaube, dass mein Verständnis der Funktion fehlerhaft ist.
Soweit ich (geglaubt) hatte, sollte das folgende Programm eine Zeichenfolge mit bis zu 30 Zeichen initialisieren, dann die Zahl '5' auf neun signifikante Ziffern setzen und diese Zeichenfolge verwenden. Das Programm sollte dann den Wert '5.00000000' drucken. Das Programm gibt jedoch den Wert 7,96788 (...) aus. Warum ist das?
#include <stdio.h>
int main()
{
char Word[30];
sprintf(Word, "%.9g", 5);
printf(Word);
return 0;
}
Dies ist darauf zurückzuführen, dass 5
eine ganze Zahl (int
) ist und Sie sprintf
sagen, dass sie eine Gleitkommazahl mit doppelter Genauigkeit (double
) ist. Sie müssen dies ändern:
sprintf(Word,"%.9g", 5);
zu einem von diesen:
sprintf(Word,"%.9g", 5.0);
sprintf(Word,"%.9g", (double) 5);
Ich sehe zwei Probleme:
Wie bereits erwähnt, müssen Sie anstelle von double
eine int
angeben. Ihr Compiler verfügt möglicherweise über eine Option zum Ausdrucken von Warnungen (z. B. -Wall
in gcc).
Um 5.00...
auszudrucken, sollten Sie %f
anstelle von %g
verwenden.
Das gibt sprintf(Word,"%.9f", (double) 5);
als korrekte Syntax.
Verwenden Sie stattdessen 5.0
. 5
ist an sich eine ganze Zahl und wird ein bisschen wie ein Float aussehen, woher Ihre 7.xxxx kommt.
Oder Sie können das Deskriptorformat ändern: "%.9d"