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
用于浮动
。