Comment créez-vous un tableau de structures dans C?

J’essaie de créer un tableau de structures où chaque structure représente un corps céleste pour le problème sur lequel je travaille dans ma classe. Je n’ai pas beaucoup d’expérience avec les structures, c’est pourquoi j’ai décidé d’essayer de les utiliser à la place de tout un tas de tableaux, cependant, je continue à rencontrer de nombreuses erreurs différentes, même si j’ai essayé d’implémenter les techniques que j’ai vu sur divers threads et sur stackoverflow (comme à Array de structs en C et C – initialiser un tableau de structs ), mais tous n’étaient pas applicables, donc je ne pouvais pas copier complètement la façon de faire il. Juste avant que je vous montre ce que j’essaie de faire, je ne pourrai pas répondre aux commentaires / questions / réponses pendant plusieurs heures car je dois me coucher depuis que je suis éveillé depuis trop longtemps. Je suis vraiment désolé pour cela, mais je suis vraiment fatigué après avoir eu une journée bien remplie et avoir travaillé sur ce problème pendant plusieurs heures.

Informations complémentaires pour ceux qui ont lu jusqu’ici: Je n’ai pas besoin de cela pour être dynamic, je connais / définissent la taille de tout à l’avance. J’ai aussi besoin que ce soit un tableau global ( gasp GLOBAL VARIABLES ) car j’accède à ceci dans plusieurs méthodes différentes qui ont des arguments définis (par exemple les méthodes GLUT).

Voici comment je définis la structure dans mon en-tête:

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

J’ai une liste d’autres variables globales que je définis avant de définir l’intérieur de la structure, et l’une d’entre elles est le tableau de cette structure (en gros, si je ne suis pas très clair dans mon langage embué, la ligne ci-dessous) est au-dessus des choses ci-dessus):

 struct body bodies[n]; 

Juste pour que vous le sachiez, n est quelque chose que j’ai légitimement défini (c.-à-d. #define n 1 ).

J’utilise ce tableau dans plusieurs méthodes différentes, mais la plus simple et la moins encombrante est une forme simplifiée de ma main où j’initialise toutes les variables de chacune des structures, juste pour définir les variables avant de les modifier. façon:

  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; } 

L’erreur actuelle que je rencontre est nbody.c:32:13: error: array type has incomplete element type où la ligne 32 est l’endroit où je crée le tableau des structures.

Merci pour toute aide que vous avez daigné donner, je vous promets que je vous recontacterai au plus tard dans 12 heures.

Une dernière précision, par en-tête, j’entends l’espace au-dessus de int main(void) mais dans le même fichier * .c.

 #include #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; } 

cela fonctionne bien. Votre question n’était pas très claire au passage, donc associez la disposition de votre code source à ce qui précède.

bouge toi

 struct body bodies[n]; 

après

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

Reste que tout va bien.

Je pense que tu pourrais l’écrire aussi. Je suis aussi étudiant et je comprends votre combat. Une réponse un peu tardive mais ok.

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

Donc, pour tout rassembler en utilisant 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); } 

Cette erreur signifie que le compilateur n’est pas capable de trouver la définition du type de votre struct avant la déclaration du tableau de structs, puisque vous dites que vous avez la définition de la structure dans un fichier d’en-tête et que l’erreur est dans nbody.c alors vous devriez vérifier si vous incluez correctement le fichier d’en-tête. Vérifiez vos #include et assurez-vous que la définition de la structure est faite avant de déclarer une variable de ce type.