Хранение значений из файла в структурный массив в C - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь прочитать значения из моего текстового файла и сохранить их в массиве struct.Мой текстовый файл имеет следующие значения:

names.txt

Num_of_rec: 5
3 7 10 1 red
5 6 8 2 red
9 9 16 5 blue
13 4 19 2 green
12 8 15 4 blue

И мой код пока таков:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ERROR -1
#define MAXLEN 256

struct Point {
    float x;
    float y;
};

struct Rectangle {
    struct Point top_left;
    struct Point bottom_right;
    char color[7];
};


int main() {
    int i, N;
    char junk[MAXLEN];
    struct Rectangle *data;
    FILE  *fp;

    fp = fopen("names.txt", "r");

    fscanf(fp,"%s %d\n",junk,&N);
    printf("No: %d", N);

    data = (struct Rectangle *) malloc(N*sizeof(struct Rectangle));

    for(i=0; i<N; i++) {
        fscanf(fp, "%lf %lf %lf %lf %s", data[i].top_left.x, data[i].top_left.y, data[i].bottom_right.x, data[i].bottom_right.y);
    }

    return 0;
}

Я хочу добавить все эти значения вмассив данных (данных), но я не знаю, как это сделать правильно.До сих пор вывод:

No: 5

, и это просто сбой.Я не понимаю, заключается ли проблема в том, какой метод я использую для чтения значений из файла и сохранения их в массиве struct или как-то еще.

1 Ответ

0 голосов
/ 25 января 2019
fscanf(fp, "%lf %lf %lf %lf %s", data[i].top_left.x, data[i].top_left.y, data[i].bottom_right.x, data[i].bottom_right.y);

Есть три проблемы, связанные с fscanf:

  1. fscanf принимает указатели, вы передаете значения
  2. fscanf ожидает 5 указателей, вы предоставляете только 4 значения.
  3. спецификатор формата %lf ожидает указатель на double тип

Изменение приведенного выше оператора на следующее должно разрешить сбой.

fscanf(fp, "%f %f %f %f %s", &data[i].top_left.x, &data[i].top_left.y, &data[i].bottom_right.x, &data[i].bottom_right.y, data[i].color);
...