创建一个链表以注册C语言的学生
在parser.h中:创建一个链表以注册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
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