C: Fscanf вызывается несколько раз, не работает - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь прочитать различные значения в текстовом файле: вот мой файл:

4,3
30.0
20.0
1.0

Мой вывод работает для первой строки, я могу получить 4 и 3 отдельно одним вызовом fscanf. Но потом, когда я хочу снова вызвать fscanf, чтобы получить double, он возвращает 0, но я хочу 30.0!

Мой код здесь:

int* read_size(FILE* f) {
  int*  taille;
  fscanf(f, "%d,%d", &taille[0], &taille[1]);
  return taille;
}

int read_int(FILE* f) {
  int i;
  fscanf(f, "%d", &i);
  return i;
}

double read_double(FILE* f) {
  double d;
  fscanf(f, "%lf", &d);
  return d;
}

FILE* getFile() {
  char* fileName = "1.conf";
  FILE* f = fopen(fileName, "r");
  return f;
}



 int main( int argc, char *argv[]) {
      FILE* f = getFile();
      int* taille = read_size(f);
      printf("maitre : taille[0] : %d, taille[1] : %d\n", taille[0], taille[1]);
      double temperature = read_double(f);
      printf("maitre : lecture de temperature %2f\n", temperature);  
}

1 Ответ

0 голосов
/ 13 ноября 2018

int* taille; резервирует место для указателя, но не для фактических значений. Чтение значений, на которые произвольно указывает указатель, приводит к неопределенному поведению.

Самый простой способ исправить это - написать static int taille[2]. Тогда все остальное должно работать нормально.

...