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


1. C89/C90 不识别F转换说明符。例如,对于fscanf7.9.6.2 中相应的 C90 段落说:转换说明符 E、G 和 X 也是有效的,其行为分别与 e、g 和 x 相同

于 2012-05-29T17:54:59.347 回答
1

%F是 POSIX(和 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 回答
1

正如 ouah 指出的那样,它们与小写字母相同。这是为什么?为了与 printf 转换说明符对称。在这里%x写下%X小写或大写数字,如deadbeefand DEADBEEF。对称性允许对输入scanf和输出使用相同的格式字符串printf

#define FMT "%F\n"

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