Как я могу добавить эти переменные в данные типа void и вызвать функцию связанного списка - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно попросить пользователя ввести информацию о человеке.имя, возраст (, рост и дата рождения.

После получения необходимой информации я сохраняю информацию через переменные структуры. Однако у меня возникает проблема с размещением всей информации в одном узле иВызов функции.

вот полная программа в .zip-файле http://www.filedropper.com/untitled_86

вот структуры

typedef char NAME[41];

typedef struct date
{
    int month;
    int day;
    int year;
} DATE;

typedef struct person
{
    NAME name;
    int age;
    float height;
    DATE bday;
} PERSON;
typedef struct list
{
    void *data;
    struct list *next;
} LIST;

вот частьОсновной метод, который имеет отношение к проблеме

int main(void)
{
    PERSON *person;

    int num;
    puts("Enter the initial number of records:");
    if (scanf("%d", &num) < 1)
        num = DEF_NUM;

    while (num-- > 0)
    {
        person = (PERSON *) malloc(sizeof(PERSON));
        inputPersonalData(person);
        addPersonalDataToDatabase(person);
    }

вот метод, в котором я задаю пользовательский ввод

void inputPersonalData(PERSON *person)
{
    printf("enter the name");
    scanf("%s", person->name);
    printf("enter the age");
    scanf("%d", &person->age);
    printf("enter the height");
    scanf("%f", &person->height);
    printf("enter the birthdate");
    scanf("%d/%d/%d", &person->bday.month, &person->bday.day, &person->bday.year);

    printf("%s %d %f %d %d %d", person->name, person->age, person->height, person->bday.month,
           person->bday.day, person->bday.year);

    // head->data = &person->name;
    // printf("%p", head->data);

}
void addPersonalDataToDatabase(PERSON *person)
{

    // add(head, tail, person);
    // need help here once I call the function add it always leaves
    // with exit code 11

}

функция связанного списка

void add(LIST **head, LIST **tail, void *data)
{
    if (*tail == NULL)
    {
        *head = *tail = (LIST *) malloc(sizeof(LIST));
        (*head)->data = data;
        (*head)->next = NULL;
    } else
    {
        (*tail)->next = (LIST *) malloc(sizeof(LIST));
        *tail = (*tail)->next;
        (*tail)->data = data;
        (*tail)->next = NULL;
    }
}

1 Ответ

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

Ваша проблема в том, что вы не можете получить доступ к своим данным, потому что ваш LinkedList использует void *?Если это так, вы можете либо использовать ЛИЦО * вместо этого, либо вы можете привести пустоту * к ЛИЦУ *, чтобы вы могли разыменовать указатели.Возможно, вам нужно быть более конкретным с вашей проблемой.

...