2

私は C で学生のデータベースを作成しており、次のような 2 つの構造の Student と Course を定義しました。

typedef struct student Student;
typedef struct course Course;

struct course
{
    char number[300];
    char title[300];
    char instructor[300];
    char days[10];
    char start[10];
    char end[10];
    char location[300];
};

struct student 
{
    char name[300];
    int age;
    Course course1;
    Course course2;
};

Student *Data[30];
Course *Courses[30];

作成した生徒の表示に問題があります。名前、年齢、および 2 つのコースを印刷したいだけですが、学生のコース構造の要素にアクセスするのに問題があります。

私はこれを試しました:

printf("course1: %s\t%-40s%-30s\t%s\t%s-%s\t%s\n",
       Data[i]->course1.number,
       Data[i]->course1.title,
       Data[i]->course1.instructor,
       Data[i]->course1.days,
       Data[i]->course1.start,
       Data[i]->course1.end,
       Data[i]->course1.location);

しかし、もちろんそれはうまくいきません...

4

1 に答える 1

2

説明用の例として、構造体を少し単純化しました。これは、データへのアクセス方法を理解するのに役立つ場合があります。ニーズに合わせて必要に応じて微調整/拡張します。

typedef struct student Student;
typedef struct course Course;

struct course {
    char title[300];
};

struct student {
    char name[300];
    Course * course;  // pointer to a course
};

Student students[30]; // preallocate 30 students
Course  courses[30];  // preallocate 30 courses

テスター:

void main(void) {

    // 1st course
    strcpy(courses[0].title,"C Language 101");

    // 1st Student
    strcpy(students[0].name,"Charles");

    // Assign 1st Student to course #1
    students[0].course = & courses[0];

    printf("Student 1: name=%s course=%s", students[0].name, students[0].course->title);

    return;
}

出力:

Student 1: name=Charles course=C Language 101
于 2013-03-19T02:59:37.477 に答える