创建一个链表以注册C语言的学生

创建一个链表以注册C语言的学生,c,linked-list,C,Linked List,在parser.h中: typedef enum _SEX {MALE = 'M', FEMALE = 'F', OTHER = 'O'} SEX; struct course { char grade; unsigned int number; struct course *next; }; struct student { char name[MAX_NAME_LEN]; unsigned int age; SEX sex; float gpa; struct

在parser.h中:

typedef enum _SEX {MALE = 'M', FEMALE = 'F', OTHER = 'O'} SEX;

struct course {
 char grade;
 unsigned int number;
 struct course *next;
};

struct student {
  char name[MAX_NAME_LEN];
  unsigned int age;
  SEX sex;
  float gpa;
  struct course *courses;
  struct student *next;
 };
在parser.c中: 我有一个无法更改的函数struct student*enroll_student(…)。此函数用于创建新学员并将其存储在列表中的适当位置(按照字典顺序)。这就是我目前所拥有的。。。。 我的问题是:我不知道如何访问enum SEX,也不知道这是否是正确的方法。 任何反馈或帮助都将不胜感激。谢谢大家!

   /*globally declared*/
   static struct student *head; 

struct student* enroll_student(char *name, unsigned int age, SEX sex, float gpa){

 struct student *enroll = NULL;
   /*allocate memory*/
    enroll = (struct student*)malloc(sizeof(struct));

  if(enroll != NULL){
    /*INITIALIZE*/
    strncpy(enroll->name, name, MAX_NAME_LEN);
    enroll->age = age; 
    /* How do I access the ENUM SEX?*/
    enroll->gpa = gpa; 
    enroll->next = NULL;

   }
   return enroll;

}

用于在链表中插入任何内容的
enroll\u student
功能是而不是。函数的目的是a)创建新的学生对象和b)初始化对象。因此,当您需要一个新的学生对象时,您可以调用这个函数,但是在链表中插入学生对象的代码必须添加到函数之外。比如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LEN 100

typedef enum _SEX {MALE = 'M', FEMALE = 'F', OTHER = 'O'} SEX;

struct course {
  char grade;
  unsigned int number;
  struct course *next;
};

struct student {
  char name[MAX_NAME_LEN];
  unsigned int age;
  SEX sex;
  float gpa;
  struct course *courses;
  struct student *next;
};

struct student* enroll_student(char *name, unsigned int age, SEX sex, float gpa){
  struct student *enroll = NULL;
  /*allocate memory*/
  enroll = malloc(sizeof *enroll);

  if(enroll != NULL){
    /*INITIALIZE*/
    strncpy(enroll->name, name, MAX_NAME_LEN);
    enroll->age = age;
    enroll->sex = sex;
    enroll->gpa = gpa;
    enroll->courses = NULL;
    enroll->next = NULL;

  }
  return enroll;
}

int main(void) {
  static struct student *head = NULL;
  struct student* st;

  // Make a new student
  st = enroll_student("Bart", 21, MALE, 1.0);

  // Insert in front of list
  st->next = head;
  head = st;

  // Make a new student
  st = enroll_student("Kim", 25, FEMALE, 1.0);

  // Insert in front of list
  st->next = head;
  head = st;

  // Print all students in the list
  struct student* tmp = head;
  while (tmp)
  {
    printf("Name: %s\n", tmp->name);
    tmp = tmp->next;
  }

  // Free allocated memory
  while (head)
  {
    tmp = head;
    head = head->next;
    free(tmp);
  }

  return 0;
}

您缺少将其添加到链接列表的代码。@harper-maybe@harper-maybe-hermathyte?为什么不为学生结构和课程结构使用typedef?@AAB因为这些结构是预定义的,我不允许更改它!
Name: Kim
Name: Bart