我有个功能

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/

10-12 00:20
查看更多