我遇到了一些具有以下类型行的遗留代码:
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转换说明符。例如,对于fscanf7.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小写或大写数字,如deadbeefand DEADBEEF。对称性允许对输入scanf和输出使用相同的格式字符串printf。
#define FMT "%F\n"
sscanf (str, FMT, &value);
printf (FMT, value);