Не удалось передать переменную struct-array в качестве параметра функции - PullRequest
1 голос
/ 20 октября 2011

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

struct Student
{
    float average;
    int ID;
    int grades[5];
    char firstName[20], lastName[20];
};

void main(void)
{
    struct Student sTable[10];

    float maxAverage(float sTable[].average)
    {
        int i;
        float max = 0;

        for(i = 0;i < 10; ++i)
        {
            if(sTable[i].value > max)
            {
                max += sTable[i].value;
            }
        }
        return max;
    }

    printf("%f",maxAverage(sTable[].average));
}

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Здесь есть несколько проблем.

  1. Вы не можете вкладывать функции в другие функции, как в языках, таких как Java, C #, Python.
  2. Вы неправильно передаете массив struct.
  3. Ваше основное объявление неверно.

Вы хотите написать что-то вроде этого:

struct Student
{
    float average;
    int ID;
    int grades[5];
    char firstName[20], lastName[20];
};

float maxAverage(struct Student sTable[])
{
    int i;
    float max = 0;

    for(i = 0;i < 10; ++i)
    {
        if(sTable[i].value > max)
        {
            max += sTable[i].average;
        }
    }
    return max;
}

int main(void)
{
    struct Student sTable[10];
    //initialize sTable
    printf("%f", maxAverage(sTable));
    return 0;
}

Обратите внимание, что вам не хватает инициализации sTable.

Более того, вы действительно должны передать длину массива в качестве параметра maxAverage. Это позволит вам более гибко использовать массивы любой длины.

0 голосов
/ 20 октября 2011

Прежде всего, вы не можете объявить или определить функцию внутри другой функции, поэтому переместите maxAverage за пределы main (который, кстати, должен возвращать int, а не void).Во-вторых, учитывая массив структур, вы не можете просто автоматически создать массив значений из определенного поля структур;если вы хотите, вам придется вручную объявить отдельный массив (в данном случае) float s, а затем скопировать поля average одно за другим.Более простым способом было бы просто передать sTable себя в maxAverage и заставить maxAverage работать только с полями average структур в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...