使用%f,%e,%g,%E或%G与scanf有什么区别?

lee*_*e77 11 c floating-point scanf

在C中,当用于使用scanf读入浮点变量时,格式说明符%f,%e,%g,%E和%G是否有任何差异?也就是说,代码片段的行为是否会发生

float x;
scanf("%<one of f, e, g, E, G>", &x);
Run Code Online (Sandbox Code Playgroud)

是否依赖于说明者的选择?

我首先假设%f只能正确解释十进制表示法,而%e只能正确解释科学记数法,但在我的系统中,每种情况下都可以正常工作.但也许我的系统只是自由主义......

我在书本或网上找不到任何明确的陈述......

Mar*_*n R 10

上面的答案是指C++,但C也是如此.

来自" 包含更正TC1,TC2和TC3的C99标准的最终版本中的 "7.19.6.2 fscanf函数" ,格式为草稿"(链接复制自http://en.wikipedia.org/wiki/C99):

a,e,f,g
匹配可选带符号的浮点数,无穷大或NaN,其格式与strtod函数的主题序列的预期格式相同.相应的参数应该是浮动的指针.

转换说明符A,E,F,G和X也是有效的,并且分别与a,e,f,g和x的行为相同.

因此,正如您所经历的那样,%f, %e, %g, %E, %G在扫描数字时所有行为都相同.

  • 打印它们怎么样? (2认同)