1

次のタイプの行を持つレガシーコードに出くわしました。

sscanf(szBuff、 "%Fd%Ff%Fd%Ff"

FdやFfのような修飾子を見た人はいますか?もしそうなら、それはどういう意味ですか?

情報が見つからないようです。コードはコンパイルされ、正常に実行されます。

4

3 に答える 3

6

Cはfscanf関数について次のように述べています。

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

したがって、%Fdでは、変換仕様は。%Fと同等%fです。dは変換仕様の一部ではないことに注意してください。

たとえば(fprintf関数%Fの場合も%f):

printf("%fd\n", 3.141592);

印刷されます:

3.141592d


F1. C89/C90は変換指定子 を認識しません。たとえばfscanf、7.9.6.2の対応するC90段落の場合、次のようになります。変換指定子E、G、およびXも有効であり、それぞれe、g、およびxと同じように動作します。

于 2012-05-29T17:54:59.347 に答える
1

ouahが指摘したように、これらは小文字の対応物と同じです。何故ですか?printf変換指定子との対称性のため。ここ%xに、と%Xのような小文字または大文字の数字を書きdeadbeefますDEADBEEF。対称性により、入力scanfと出力の両方に同じフォーマット文字列を使用できますprintf

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);
于 2012-05-29T18:03:56.413 に答える
1

%FPOSIX(およびC99)拡張機能です。

http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html

「変換指定子A、E、F、G、およびXも有効であり、それぞれa、e、f、g、およびxと同等である必要があります。」

于 2012-05-29T18:08:26.020 に答える