15

C では、scanf で float 変数を読み取るために使用される場合、フォーマット指定子 %f、%e、%g、%E、および %G に違いはありますか? つまり、コード スニペットの動作は

float x;
scanf("%<one of f, e, g, E, G>", &x);

指定子の選択に依存することはありますか?

%f は 10 進数表記のみを正しく解釈し、%e は科学表記のみを正しく解釈すると最初に想定していましたが、私のシステムでは、どちらの場合も問題なく動作します。しかし、私のシステムはリベラルなだけかもしれません...

私の本やウェブ上で、これについての明確な声明を見つけることができませんでした...

4

6 に答える 6

11

上記の回答は C++ に関するものですが、C についても同様です。

「7.19.6.2 The fscanf function」より、「C99 標準の最終バージョン、正誤表 TC1、TC2、および TC3 が含まれ、ドラフトとしてフォーマットされています」 ( http://en.wikipedia.org/wiki/C99からコピーされたリンク) ):

a,e,f,g
オプションで符号付きの浮動小数点数、無限大、または NaN に一致し、その形式は strtod 関数のサブジェクト シーケンスに期待されるものと同じです。対応する引数は浮動小数点へのポインタでなければなりません。

変換指定子A、E、F、G、およびXも有効であり、それぞれa、e、f、g、およびxと同じように動作します。

したがって、経験したように、数字をスキャン%f, %e, %g, %E, %Gするときはすべて同じように動作します。

于 2013-11-10T20:49:24.720 に答える
2

f,e,gすべて浮動小数点数用です

ドキュメントから:-

オプションで小数点を含み、オプションで前に符号 (+ または -) を付け、オプションで e または E 文字と 10 進整数 (または strtod でサポートされている他のシーケンスの一部) を後ろに付けた一連の 10 進数。C99 に準拠する実装は、0x または 0X が先行する場合、16 進浮動小数点形式もサポートします。

また、 it( ) が浮動小数点数に一致するというこのリファレンスも確認してください。f,e,g

于 2013-11-10T20:07:27.667 に答える
1

C では、float 変数と double 変数の両方が小数点以下 6 桁まで表示されます。printf()これは、数値が実際に格納される精度 (正確さ) ではなく、これらの変数の型を表示するために使用される小数点以下の桁数のみを示します。

次のプログラムは、さまざまなデータ型がどのように宣言および表示されるかを示しています。

#include <stdio.h>

main()
{

    float   a = 23.567;
    double  b = 11e+23;

    printf("Float variable is %f\n", a);
    printf("Double variable is %e\n", b);
}

出力

Float variable is 23.567000
Double variable is 11.000000e23
于 2015-11-26T10:32:43.790 に答える
-1
%i=defaults for decimals
%u=gives the memory address of the variable
%p=gives the value of pointer
%e=gives the scientific notation
%g=handles large floating numbers
于 2015-08-29T11:29:17.597 に答える