2017-10-25 1 views
-1

に学生を登録するリンクリストを作成:parser.cではparser.hでC

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

: 私は* 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; 

}

+1

あなたがリンクリストに追加するコードを逃しています。 –

+0

@harperおそらくhttps://en.wikipedia.org/wiki/Third_gender – 4386427

+0

@ハーパーおそらくHermaphrodite? –

答えて

0

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

出力:

Name: Kim 
Name: Bart