sscanf Modifier%Fd扫描的是什么类型?

时间:2012-05-29 17:53:06

标签: c windows visual-studio scanf

我遇到过一些遗留代码,它们具有以下类型的行:

sscanf(szBuff,“%Fd%Ff%Fd%Ff”

有没有人看过像Fd或Ff这样的修饰符?如果是这样,那是什么意思?

我似乎无法找到有关它的任何信息。代码编译并运行正常。

3 个答案:

答案 0 :(得分: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转换说明符。例如,对于fscanf,7.9.6.2中相应的C90段落说:转换说明符E,G和X也是有效的,其行为与e,g和x相同

答案 1 :(得分:1)

正如ouah所指出的,这些与他们的小写对应物相同。这是为什么?用于与printf转换说明符对称。此处%x%X会写下deadbeefDEADBEEF等小写或大写数字。对称性允许对scanf输入使用相同的格式字符串,并使用printf输出。

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);

答案 2 :(得分:1)

%F是POSIX(和C99)扩展名。

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

  

“转换说明符A,E,F,G和X也是有效的,分别等于a,e,f,g和x。”