Две проблемы здесь.Во-первых, указатель p
не является указателем ни на что.Затем вы пытаетесь разыменовать этот указатель при присваивании каждому полю.Разыменование неинициализированного указателя вызвало неопределенное поведение .
Во-вторых, это не делает то, что вы думаете:
array[i]=p->id,&p.x,&p.y;
Это не принимает группу значений и присваиваетих в структуру как единое целое.За этим назначением следует оператор запятой.
Оператор запятой имеет более низкий приоритет, чем оператор присваивания, поэтому это выражение анализируется как:
(array[i]=p->id),&p.x,&p.y;
Поэтому он пытается назначить p->id
,который является массивом array[i]
, который является несовпадением типов.Затем два других значения оцениваются и отбрасываются.
Вы можете исправить эти проблемы, объявив p
как экземпляр struct Point_of_Interest
вместо указателя на одно, затем вы можете назначить всю эту структуру длядругое:
void Data_Points(struct Point_of_Interest array[])
{
struct Point_of_Interest p; // not a pointer
int i;
for(i=0;i<MaxPoints;i++)
{
do{
// switch from -> to . wherever p is used
printf("Give id and coordinates of the city: ");
scanf("%s",p.id);
printf("Dwse to X tou %d: ",i+1);
scanf("%lf",&p.x);
printf("Dwse to Y tou %d: ",i+1);
scanf("%lf",&p.y);
}while(p.x < Xmin && p.y < Ymin && p.x > Xmax && p.y > Ymax);
array[i]=p; // assign the whole struct
}
}