Gibt es einen Unterschied in der Verwendung von %f, %e, %g, %E oder %G mit scanf?
In C, gibt es einen Unterschied in der format-Spezifizierer %f, %e, %g, %E und %G, wenn verwendet, zu Lesen in einer float-Variablen mit scanf? Das heißt, wird das Verhalten der code-snippet
float x;
scanf("%<one of f, e, g, E, G>", &x);
immer abhängig von der Wahl der Planer?
Habe ich zunächst angenommen, dass %f würde nur interpretieren Dezimalschreibweise richtig, und %e würde nur zu interpretieren, wissenschaftliche notation korrekt, aber auf meinem system, jede von Ihnen funktioniert in jedem Fall. Aber vielleicht ist mein system einfach nur liberal...
Konnte ich nicht finden eine definitive Aussage zu diesem in meinen Büchern oder im web...
- Möchten Sie vielleicht zu Lesen, z.B. dieser Verweis.
- Vielen Dank - dieser Hinweis ist auf C++, das ist, warum ich nicht vollständig Vertrauen, es vor... Bearbeitet meine Frage ist nun, hinzufügen von "C"
- Die POSIX-Seite für
fscanf()
spiegelt die C-standard und fügt einige (gezielt markiert) Erweiterungen. Es sagt, dass umwandlungsspezifikationena
,e
,f
,g
,A
,E
,F
,G
behandeln alle floating-point-zahlen in jedem Format. Die Exponenten sind immer erlaubt (aber nicht erforderlich). Dezimalstellen werden akzeptiert, aber nicht erforderlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die obige Antwort bezieht sich auf C++, aber das gleiche gilt auch für C.
Vom "7.19.6.2 Die fscanf-Funktion" in der "Die endgültige version des C99-standard mit corrigenda TC1, TC2, und TC3 enthalten, formatiert als Entwurf" (link kopiert aus http://en.wikipedia.org/wiki/C99):
So
%f, %e, %g, %E, %G
alle gleich Verhalten, wenn Scannen zahlen, als Sie erlebt.f,e,g
alle sind für Floating-point-ZahlAus der doc:-
Überprüfen Sie auch diese Referenz, die sagt, dass es(
f,e,g
) entspricht einem floating-point-Zahl.C zeigt beide float und double Variablen zu sechs Dezimalstellen. Dies bezieht sich NICHT auf die Präzision (Genauigkeit), in der die Anzahl gespeichert wird, nur, wie viele Dezimalstellen
printf()
verwendet für die Anzeige dieser Variablen-Typen.Das folgende Programm veranschaulicht, wie die verschiedenen Datentypen deklariert und angezeigt:
AUSGABE
%f: Es druckt die entsprechende Nummer, wie eine decimal-floating-point-Zahl, z.B. 214.52
%e: Es gibt die Zahl in der wissenschaftlichen Schreibweise, z.B. 214.52 e+2.
%g: Es druckt die entsprechende Zahl in der kürzest zwischen beiden, z.B. In den beiden oben beschriebenen Beispielen, wenn ich drucken möchten, die Anzahl über %g, dann wäre es 214.52 aber nicht 2.145 e+2, da es länger ist.
Ausgabe:
12.500000
1.250000 e+001
12.5