struct student {
char *s_name;
struct student_id s_id;
/** Number of references to this student. */
unsigned int s_ref;
/** Transcript (singly-linked list, NULL terminator). */
struct transcript_entry *s_transcript;
/** Whether or not this student has completed his/her program. */
student_complete s_complete;
};
struct student* student_grad_create(const char *name, size_t namelen,
struct student_id, int phd);
struct student* student_undergrad_create(const char *name, size_t namelen,
struct student_id);
有三种学生,硕士生和博士生以及本科生。我需要实现一个叫做的功能:
int student_add_entry(struct student *, struct transcript_entry *);
我不知道如何确定学生类型?
我应该这样做吗?
int student_add_entry(struct student *undergrad_create, struct transcript_entry *){}
int student_add_entry(struct student *grad_create, struct transcript_entry *){}
感谢。
答案 0 :(得分:2)
您可以在结构
中添加student_type
字段
struct student {
char *s_name;
struct student_id s_id;
/** Number of references to this student. */
unsigned int s_ref;
/** Transcript (singly-linked list, NULL terminator). */
struct transcript_entry *s_transcript;
/** Whether or not this student has completed his/her program. */
student_complete s_complete;
enum student_type s_type;
};
你会有enum
喜欢
enum student_type
{
UndergraduateStudent,
MasterStudent,
PHDStudent
};
在创建struct student
的实例时,您需要设置s_type
字段,然后在其他地方使用s_type
来确定学生的类型。
我还会编写一个通用函数来创建struct student
的所有可能参数的实例,如果你想要方便,你也可以为每个特定类型创建一个函数,你可以在其中传递默认参数通用功能。
答案 1 :(得分:0)
我正在研究一些学生注册系统问题。 1.有三种不同的学生类型 2.本科生通过考试50分,硕士和博士通过65分 3.本科生必须完成40门课程,硕士生5人,博士生2人。
这是我需要实现的三个功能。 “ 下面是transcript_entry的结构:
struct transcript_entry {
enum faculty te_faculty;
unsigned int te_number;
unsigned int te_grade;
/** Number of references to this entry. */
unsigned int te_ref;
/** Next entry in the singly-linked list (or NULL terminator). */
struct transcript_entry *te_next;
};
我实现了以下功能:
struct transcript_entry* transcript_entry(enum faculty faculty, unsigned int course_number, unsigned int grade){
struct transcript_entry *trans_entry;
trans_entry = malloc(sizeof(struct transcript_entry));
trans_entry->te_faculty = faculty;
trans_entry->te_number = course_number;
trans_entry->te_grade = grade;
trans_entry->te_ref = 1;
trans_entry->te_next = NULL;
return trans_entry;
}
/** Deallocate a @ref transcript_entry. */
void transcript_entry_free(struct transcript_entry *trans_entry){
free(trans_entry);
}
/** Increment a @ref transcript_entry's refcount. */
void tehold(struct transcript_entry *trans_entry){
trans_entry-> te_ref++;
}
我看了一些关于引用计数的教程。我不知道我的代码是否有意义。因此,这意味着增加引用计数++,或减少te_ref - ;