我遇到了一些具有以下类型行的遗留代码:
sscanf(szBuff,"%Fd %Ff %Fd %Ff"
有没有人见过像 Fd 或 Ff 这样的修饰符?如果是这样,那是什么意思?
我似乎找不到任何关于它的信息。代码编译并运行良好。
我遇到了一些具有以下类型行的遗留代码:
sscanf(szBuff,"%Fd %Ff %Fd %Ff"
有没有人见过像 Fd 或 Ff 这样的修饰符?如果是这样,那是什么意思?
我似乎找不到任何关于它的信息。代码编译并运行良好。
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
F
转换说明符。例如,对于fscanf
7.9.6.2 中相应的 C90 段落说:转换说明符 E、G 和 X 也是有效的,其行为分别与 e、g 和 x 相同
%F
是 POSIX(和 C99)扩展。
http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html
“转换说明符 A、E、F、G 和 X 也是有效的,应分别等效于 a、e、f、g 和 x。”
正如 ouah 指出的那样,它们与小写字母相同。这是为什么?为了与 printf 转换说明符对称。在这里%x
写下%X
小写或大写数字,如deadbeef
and DEADBEEF
。对称性允许对输入scanf
和输出使用相同的格式字符串printf
。
#define FMT "%F\n"
sscanf (str, FMT, &value);
printf (FMT, value);