C создание struct-указателей - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь сохранить свою структуру Human в массиве, генерируя ее в цикле for.Я совершенно беспомощен, так как я довольно плохо знаком с указателями и не могу заставить работать эту единственную полоску кода.Мои самые большие вопросы

  • как хранить такие Human в массиве Human s
  • Как получить доступ к Human переменным и работать с ними

Вот мой текущий код:

typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char *name;
    Date Birth_date;
} Human;

char gen_name() {
    char *name[5];

    name[0] = "Zoro";
    name[1] = "Peter";
    name[2] = "Ambrozsy";
    name[3] = "Chuanita";
    name[4] = "Jack";

    int x = rand() % 5;

    return (name[x]);
}

Human *createHuman(char *name, int day, int month, int year) {
    Human *h = malloc(sizeof(Human));

    h->name = name;
    h->Birth_date.day = day;
    h->Birth_date.month = month;
    h->Birth_date.year = year;

    return h;
}

void gen_Humans(Human array[], int n) {
    // n == MAX
    for (int i = 0; i < n; i++) {
        char *name = gen_name();
        int day = gen_day();
        int month = gen_month();
        int year = gen_year();

        array[i] = *createHuman(name, day, month, year);
    }
}

int main() {
    Human *human_array[MAX];

    gen_Humans(human_array, MAX);
    printHuman(human_array, MAX);
}

1 Ответ

0 голосов
/ 16 апреля 2019

human_array - это массив указателей, поэтому вы должны объявить его таким же образом в get_Humans():

void gen_Humans(Human *array[], int n)

Тогда вам не следует разыменовывать указатель, который возвращает createHuman():

array[i] = createHuman(name, day, month, year);

Вы не показали printHuman(), но оно также должно быть похожим. В нем вы можете напечатать отдельных людей с чем-то вроде:

printf("%s %d-%02d-%02d\n", array[i]->name, array[i]->Birth_date.year, array[i]->Birth_date.month, array[i]->Birth_date.day);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...