fscanf没有正确读取双精度数

时间:2018-05-20 09:59:45

标签: c double scanf

我有一个功能

void getXFromFile3(FILE* fptr){
    double valueX;
    fscanf(fptr, "%lf\n", &valueX);
    printf("%lf", valueX);
}

并使用一些双数字文件data.dat。

其中一个是-0.572869279,但我的功能打印为-0.572869。 看起来我的号码被切断了。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:2)

告诉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); 
}

胡! ; - )