Полагаю, вам нужно что-то вроде этого:
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-линий.Я оставляю это в качестве упражнения для читателя.