我有个功能
void getXFromFile3(FILE* fptr){
double valueX;
fscanf(fptr, "%lf\n", &valueX);
printf("%lf", valueX);
}
并将data.dat与一些双精度数字一起归档。
其中之一是
-0.572869279
,但我的函数打印-0.572869
。好像我的电话被切断了。
你知道我做错了什么吗?
最佳答案
告诉scanf
告诉您它扫描了多少个字符,然后告诉printf
在逗号后打印这个数字。
仍然需要注意符号和逗号前的数字。
下面的代码假设输入中有前导零且没有正号。
void getXFromFile3(FILE* fptr){
double x;
int n;
fscanf(fptr, "%lf%n", &x, &n);
printf("%.*lf", /* the l length modifier is optional */
n /* number of characters scanned */
- (x < 0.) /* one off for the minus sign, if any */
- ((int)log10(fabs(x)) + 1) /* off as many as digits before the comma */
- 1, /* one off for the comma */
x);
}
胡!;-)
关于c - fscanf无法正确读取double,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50433602/