Gibt es Unterschiede bei der Verwendung von% f,% e,% g,% E oder% G mit scanf?

8

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

    
lee77 10.11.2013, 20:03
quelle

4 Antworten

8

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.

    
Martin R 10.11.2013, 20:49
quelle
2

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 .

    
Rahul Tripathi 10.11.2013 20:07
quelle
0

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%     
Keshav Bansal 26.11.2015 10:32
quelle
-2
%Vor%     
mohit 29.08.2015 11:29
quelle

Tags und Links