Подтвердить что ты не робот

Как вы создаете массив структур в C?

Я пытаюсь создать массив структур, где каждая структура представляет собой небесное тело для проблемы, над которой я работаю в своем классе. У меня нет такого большого опыта работы с структурами, поэтому я решил попытаться использовать их вместо целого ряда массивов, однако я постоянно сталкиваюсь с множеством различных ошибок, хотя я пытался реализовать методы что я видел в разных потоках и в stackoverflow (например, в Массив структур в C и C - инициализировать массив structs), однако не все из них применимы, поэтому я не смог полностью скопировать способ сделать это. Прежде чем я покажу вам, что я пытаюсь сделать, я не буду отвечать на комментарии/info/ответы в течение нескольких часов, поскольку мне нужно ложиться спать, так как я просыпаюсь слишком долго, Я действительно сожалею об этом, но я действительно устал после напряженного дня и уже несколько часов работал над этой проблемой.

Дополнительная информация для тех, кто прочитал это: мне не нужно, чтобы это было динамично, я знаю/определяю размер всего заранее. Мне также нужно, чтобы это был глобальный массив (gasp GLOBAL VARIABLES), поскольку я обращаюсь к нему несколькими способами, которые имеют определенные аргументы (т.е. Методы GLUT).

Вот как я определяю структуру в моем заголовке:

struct body
{
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
};

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

struct body bodies[n];

Просто, чтобы вы знали, n - это то, что я определенно определил (т.е. #define n 1).

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

  int a, b;
 for(a = 0; a < n; a++)
 {
        for(b = 0; b < 3; b++)
        {
            bodies[a].p[b] = 0;
            bodies[a].v[b] = 0;
            bodies[a].a[b] = 0;
        }
        bodies[a].mass = 0;
        bodies[a].radius = 1.0;
 }

Текущая ошибка, с которой я столкнулась, - это nbody.c:32:13: error: array type has incomplete element type, где строка 32 - это место, где я создаю массив структур.

Спасибо за любую помощь, которую вы соизволите дать, я обещаю, что я вернусь к вам в самое последнее время, через 12 часов.

Последнее уточнение по заголовку означает пробел выше int main(void), но в том же *.c файле.

4b9b3361

Ответ 1

#include<stdio.h>
#define n 3
struct body
{
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
};

struct body bodies[n];

int main()
{
    int a, b;
     for(a = 0; a < n; a++)
     {
            for(b = 0; b < 3; b++)
            {
                bodies[a].p[b] = 0;
                bodies[a].v[b] = 0;
                bodies[a].a[b] = 0;
            }
            bodies[a].mass = 0;
            bodies[a].radius = 1.0;
     }

    return 0;
}

это отлично работает. ваш вопрос был не очень ясным, так что сопоставьте макет исходного кода с приведенным выше.

Ответ 2

переместить

struct body bodies[n];

после

struct body
{
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
};

Остальное все выглядит нормально.

Ответ 3

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

#include<stdio.h>
#define n 3

struct {
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
}bodies[n];

Ответ 4

Итак, чтобы собрать все это, используя malloc():

int main(int argc, char** argv) {
    typedef struct{
        char* firstName;
        char* lastName;
        int day;
        int month;
        int year;

    }STUDENT;

    int numStudents=3;
    int x;
    STUDENT* students = malloc(numStudents * sizeof *students);
    for (x = 0; x < numStudents; x++){
        students[x].firstName=(char*)malloc(sizeof(char*));
        scanf("%s",students[x].firstName);
        students[x].lastName=(char*)malloc(sizeof(char*));
        scanf("%s",students[x].lastName);
        scanf("%d",&students[x].day);
        scanf("%d",&students[x].month);
        scanf("%d",&students[x].year);
    }

    for (x = 0; x < numStudents; x++)
        printf("first name: %s, surname: %s, day: %d, month: %d, year: %d\n",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year);

    return (EXIT_SUCCESS);
}

Ответ 5

Эта ошибка означает, что компилятор не может найти определение типа вашей структуры перед объявлением массива структур, поскольку вы говорите, что у вас есть определение структуры в файле заголовка и ошибка находится в nbody.c, тогда вы должны проверить правильность ввода заголовочного файла. Проверьте #include и убедитесь, что определение структуры выполнено до объявления любой переменной этого типа.