fscanf не читает правильно дважды - PullRequest
0 голосов
/ 20 мая 2018

У меня есть функция

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

и файл data.dat с некоторыми двойными числами.

Один из них - -0.572869279, но моя функция печатает -0.572869.Похоже, где-то мой номер был обрезан.

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 20 мая 2018

Скажите 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); 
}

Ху!; -)

...