Домашняя работа: Программирование на C - Структуры и массивы - PullRequest
0 голосов
/ 06 марта 2011

Мое назначение требует использования следующей структуры связанного списка:

      struct studentNode {
        int     id;
        char    *fname;
        char    *lname;
        int     programs[x];
        int     labs[x];
        int     exams[x];
        int     percent;
        double  grade;

        struct  studentNode *next;
      };

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

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

Я пытался обсудить это с инструктором, и он сказал мне, чтобы погуглить. (

Пока что мне не повезло, и это выходит за рамки того, что охватывает наша книга.

Любая помощь будет оценена.

Ответы [ 4 ]

2 голосов
/ 06 марта 2011

Из того, что вы описываете:

Вам необходимо создать новый объект для каждого элемента в массиве.

поэтому сначала вы создаете что-то для хранения первого элемента (например, указатель на первый элемент). Затем при загрузке каждого предмета создайте новый studentNode и добавьте его в массив.

0 голосов
/ 06 марта 2011

Я полагаю, что ваш вопрос касается того, как указать размер программ, лабораторий и массивов экзаменов.

Вместо того, чтобы хранить массив в своей структуре, сохраняйте указатель на ваш массив.Затем, после того, как вы построили программный массив вне вашей структуры (при необходимости, используя malloc), переназначьте указатель node.program на этот массив.

0 голосов
/ 06 марта 2011

Убедитесь, что каждый studentNode не использует одни и те же массивы programs, labs и т. Д. В дополнение к созданию studentNode, вы должны создать массивы внутри них.

0 голосов
/ 06 марта 2011

Похоже, вы используете один и тот же массив для всех студентов.Вам нужно выделить отдельный массив для каждого студента.

Вы можете статически выделить фиксированное количество элементов в 2d массиве:

int progs[Num_students][x];

В этом случае вам нужно будет указать каждый массив studentNodes на правильный массив (для каждого студента).

studentNode1.programs = progs[studentNumber];

Или выделите немного памяти в куче для каждого студента.

studentNode1.programs = malloc(sizeof(int)*x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...