Проблема инициализации массива структур с помощью защитного программирования - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужна помощь. Я пытаюсь заполнить структурный массив точками интереса, но я не могу присвоить значения массиву, мне нужно использовать защитное программирование, чтобы убедиться, что точки находятся внутри некоторых границ.Пожалуйста, помогите.

struct Point_of_Interest
{
    char id[10];
    double x;
    double y;
};


struct Point_of_Interest Points[MaxPoints];

void Data_Points(struct Point_of_Interest array[])
{
    struct Point_of_Interest *p;

    int i;
    for(i=0;i<MaxPoints;i++)
    {
        do{
            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->id,&p.x,&p.y;
    }   
}

внутри основного вызова

Data_Points(Points);

1 Ответ

0 голосов
/ 26 февраля 2019

Две проблемы здесь.Во-первых, указатель 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
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...