scanf中double的格式说明符

scanf中double的格式说明符,c,double,scanf,format-specifiers,C,Double,Scanf,Format Specifiers,我编写这个程序是为了获得双输入: double n; scanf("%lf",&n); while(fgetc(stdin)!='\n') return 0; printf("%lf",n); 这个程序应该以double作为输入。假设%lf是scanf中的double的格式说明符,我使用了它。但对于后跟e的数字输入。例如(3e),读取输入时没有错误。但在处理同一变量的过程中,它会丢弃e,只考虑3,如printf语句所示。这种行为的原因是什么?根据缺陷报告#22()中给出的基本原

我编写这个程序是为了获得双输入:

double n;
scanf("%lf",&n);
while(fgetc(stdin)!='\n')
    return 0;
printf("%lf",n);

这个程序应该以double作为输入。假设
%lf
scanf
中的
double
的格式说明符,我使用了它。但对于后跟e的数字输入。例如(3e),读取输入时没有错误。但在处理同一变量的过程中,它会丢弃
e
,只考虑
3
,如
printf
语句所示。这种行为的原因是什么?

根据缺陷报告#22()中给出的基本原理,像
scanf
(使用
%lf
)和
strod
这样的函数应该消耗尽可能多的输入,以满足浮点常量的预期格式。这意味着他们应该使用
中的
e
字符,即使
e
字符后面没有实际的指数值(6.4.4.2要求指数值)

这同样适用于
%lf
%f
。在我的实验中,它们在这个输入上的行为完全相同。(当然,
%f
需要类型为
float
的目标变量)


然而,即使从输入流中同时使用
3
e
,我仍然希望
scanf
(和
strtod
)将
“3e”
识别为浮点数的无效表示(因为6.4.4.2再次要求存在指数值)并相应地采取行动。在我的实验中,
scanf
成功地读取了
3.0
。这我还不能解释。

@Darnight:不知道你的意思。我看不到
%lf
%f
的行为有任何区别。本标准规定了
scanf
double
%lf
<代码>%f
用于
浮动