Нужна помощь в перенаправлении текстового файла в 3 различных массива структур разного размера (количество элементов в структуре) - PullRequest
0 голосов
/ 05 октября 2018

Это текстовый файл:

P 20.0 2.0 20.1 60.1
P 20.0 2.0 58.1 60.1
P 20.0 2.0 20.1 20.1
P 20.0 2.0 58.1 20.1
O 1.0 1.0
O 2.0 70.0
O 70.0 10.0
X 8.0 8.0
X 8.0 70.0
X 70.0 70.0
X 70.0 8.0 

Все структуры, начинающиеся с одной буквы, должны находиться в одном массиве.Код, который я пробовал, выглядит следующим образом, но я знаю, что я далеко.Я чувствую, как будто мне нужно сделать что-то вроде «если структура имеет 5 элементов», то сохранить.

typedef struct {    
    char   id; 
    double trans_pow; 
    double sig_freq;
    double x_cord;
    double y_cord; 
    } WAP_t;


void wap_struct_reader(WAP_t waps[], int *counter) { 
    int i=0;       
    while(scanf("%c %lf %lf %lf %lf", &waps[i].id, &waps[i].trans_pow, 
            &waps[i].sig_freq, &waps[i].x_cord, &waps[i].y_cord)!=EOF) { 
        i++; 
    }
}

1 Ответ

0 голосов
/ 05 октября 2018

Полагаю, вам нужно что-то вроде этого:

void wap_struct_reader(WAP_t p_waps[], WAP_t o_waps[], WAP_t x_waps[], int *counter) {
  int pcount = 0, ocount = 0, xcount = 0;
  char id;
  double trans_pow, sig_freq, x_cord, y_cord;
  *counter = 0;
  while (scanf("%c %lf %lf %lf %lf", &id, &trans_pow, &sig_freq, &x_cord, &y_cord) != EOF) 
  {
    WAP_t *p;
    int i;
    switch (id)
    {
    case 'P': p = p_waps; i = pcount++;  break;
    case 'O': p = o_waps; i = ocount++;  break;
    case 'X': p = x_waps; i = xcount++;  break;
    default:
      // TODO: handle case line starts neither with P, O or X.
    }

    p[i].id = id;
    p[i].trans_pow;
    p[i].sig_freq;
    p[i].x_cord = x_cord;
    p[i].y_cord = y_cord;

    (*counter)++;
  }
}

Строки P, O и X могут быть смешаны во входном файле, поэтому этот файл действителен.

X 8.0 70.0
P 20.0 2.0 20.1 60.1
X 70.0 70.0
P 20.0 2.0 58.1 20.1
O 1.0 1.0
O 2.0 70.0

Вызовэто так:

WAP_t pwaps[10], owaps[10], xwaps[10];
int counter;

wap_struct_reader(pwaps, owaps, xwaps, &counter);

Отказ от ответственности:

  • Для краткости здесь не делается никаких ограничений.
  • Вам определенно нужно 3счетчики, один для P-линий, один для O-линий и один для X-линий.Я оставляю это в качестве упражнения для читателя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...