我在 Windows 中使用带有 mingw 的 gcc 4.6.1。
我最近了解了%a
用浮点十六进制表示法精确表示浮点数的格式说明符(显然是在 C99 中)。
出于某种原因,我可以用这种方式打印一个浮点数,但我无法扫描它。
%a
如果我用我的代码替换 , 的两个实例来%f
处理打印和扫描浮点数就好了。
当我在传统的 Unix 系统 (gcc 4.2.1) 上运行该代码时,它似乎工作得很好。
我已经尝试了所有我能想到的浮动和双打的变化。我尝试添加 flag -std=c99
,这似乎改变了它是否将数字文字视为 double 或 float,但它并没有解决我的问题。
我想知道两件事,如果其他人可以复制这个问题,以及我可以做些什么来解决它。
#include <stdio.h>
int main(){
char buffer[1000];
sprintf(buffer, "%la", 21.3930);
double x = 0;
printf("\n");
printf(buffer);
if(!sscanf(buffer, "%la", &x))
printf("\nscan failed.");
printf("\n%la", x);
return 0;
}
输出是:
0x1.5649bap+4
scan failed.
0x0.000000p+0
帮助将不胜感激。