Gibt es in C einen Unterschied in den Formatbezeichnern% f,% e,% g,% E und% G, wenn sie in eine Float-Variable mit scanf eingelesen werden? Das heißt, wird das Verhalten des Codeausschnitts
%Vor%hängen jemals von der Wahl des Spezifizierers ab?
Ich nahm zuerst an, dass% f nur die Dezimalschreibweise korrekt interpretieren würde, und% e würde nur die wissenschaftliche Notation korrekt interpretieren, aber auf meinem System funktioniert jede von beiden in beiden Fällen gut. Aber vielleicht ist mein System nur liberal ...
Ich konnte in meinen Büchern oder im Internet keine definitive Aussage darüber finden ...
Die obige Antwort bezieht sich auf C ++, aber das gleiche gilt für C.
Ab "7.19.6.2 Die fscanf-Funktion" in der "Endgültigen Version von der C99-Standard mit den Berichtigungen TC1, TC2 und TC3, formatiert als Entwurf " (Link kopiert von Ссылка ):
a, e, f, g
Entspricht einer optional signierten Gleitkommazahl, unendlich, oder NaN, dessen Format das gleiche ist wie für die Subjektsequenz erwartet der Strtod-Funktion. Das entsprechende Argument soll ein Zeiger sein zu schweben.Die Konvertierungsspezifikatoren A, E, F, G, und X sind ebenfalls gültig und verhalten sich genauso wie a, e, f, g, und x .
So %f, %e, %g, %E, %G
verhalten sich alle identisch, wenn Sie scannen Zahlen, wie Sie erfahren haben.
f,e,g
alle sind für Fließkommazahl
Vom Dokument : -
Eine Reihe von Dezimalziffern, die optional einen Dezimalpunkt enthalten optional vor einem Zeichen (+ oder -) und optional gefolgt von dem e oder E-Zeichen und eine dezimale Ganzzahl (oder einige der anderen Sequenzen unterstützt von strtod). Implementierungen nach C99 unterstützen ebenfalls hexadezimales Gleitkommaformat, wenn 0x oder 0X vorangestellt ist.
Überprüfen Sie auch diese Referenz , die besagt, dass sie ( f,e,g
) mit einer Fließkommazahl übereinstimmt .
C zeigt sowohl float als auch double Variablen auf sechs Dezimalstellen an. Dies bezieht sich NICHT auf die Genauigkeit (Genauigkeit), in der die Zahl tatsächlich gespeichert wird, sondern nur, wie viele Dezimalstellen printf()
verwendet, um diese Variablentypen anzuzeigen.
Das folgende Programm veranschaulicht, wie die verschiedenen Datentypen deklariert und angezeigt werden:
%Vor%AUSGABE
%Vor%Tags und Links c floating-point scanf