wake-up-neo.com

Einfache Verwendung von sprintf - C

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;
}
21
CaptainProg

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);
22
ruakh

Ich sehe zwei Probleme:

  1. 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).

  2. Um 5.00... auszudrucken, sollten Sie %f anstelle von %g verwenden.

Das gibt sprintf(Word,"%.9f", (double) 5); als korrekte Syntax.

1
Dennis

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.

1
Marc B

Oder Sie können das Deskriptorformat ändern: "%.9d"

0
user3660248