Как добавить несколько значений в структуру - PullRequest
0 голосов
/ 11 ноября 2019

Мне нужно создать функцию, которая может добавить как минимум 10 различных значений x, y в мою структуру

typedef struct Point
{
    float x, y;

}Point;

Point  createPoint(double x, double y){

    Point p[10];
    for (int i = 0; i < 10; ++i){
        if (isnan(p[i].x) == 0){
            p[i].x = x;
            p[i].y = y;
        }
    }

  for (int z = 0; z < 2; ++z){
        printf("%f\n", p[0].y);
  }

}

int main(){  
    createPoint(5, 6);
    createPoint(7, 9);
    return 0;
}

При печати я получаю 2 значения с тем же числом p [0], но янужно иметь возможность достигать другого значения на другом номере

1 Ответ

1 голос
/ 11 ноября 2019

Массив p является локальным для функции createPoint и выходит из области действия при выходе из функции. Это означает, что изменения, сделанные вами в одном вызове функции, не будут видны в следующем.

Кроме того, поскольку вы не инициализируете значения p, вы не можете зависеть от них, содержащих NaN. Фактически, попытка прочитать неинициализированную переменную вызывает неопределенное поведение .

Ваш массив p должен быть глобальным или локальным для функции main, так что его время жизни увеличивается до нескольких вызововдо createPoint. Вы также должны хранить отдельный счетчик того, сколько элементов в настоящее время хранится в p, чтобы вы могли записать в следующий доступный слот.

void createPoint(Point *p, double x, double y, int *count)
{
    p[*count].x = x;
    p[*count].y = y;
    (*count)++;
}

void printPoints(Point *p, int count)
{
  for (int z = 0; z < count; ++z){
        printf("%f\n", p[z].y);
  } 
}

int main(){  
    Point p[10];
    int count = 0;

    createPoint(p, 5, 6, &count);
    createPoint(p, 7, 9, &count);
    printPoints(p, count);
    return 0;
}
...