2013-03-19 66 views
2

我寫學生在C數據庫中,我已經定義了兩個結構和學生的課程,像這樣:結構內的結構?

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]; 
我有我顯示,雖然創建了學生的麻煩

。我只想打印出姓名,年齡和兩門課程,但我無法通過學生訪問課程結構的元素。

我已經試過這樣:

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

當然,這是不工作的,但...

+1

你得到什麼錯誤?從設計角度來看:每個學生都有完整的課程副本。 – John3136 2013-03-19 02:19:10

+2

「數據」和「課程」分別僅包含指向「學生」和「課程」結構的指針,除非您以某種方式指定它們,否則這些指針不會指向有效的結構實例。你做到了嗎? – Praetorian 2013-03-19 02:22:06

回答

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 
+0

爲什麼你修改'student'結構只包含*指針*到'Course'結構?這不是原來的代碼。這是必要的改變嗎?這是你會推薦的嗎? – 2013-03-19 03:10:33

+1

@CodyGray - 我創建了一個簡化的教學示例來展示如何訪問數據。有很多方法可以實施。在一個非常大的應用程序中,我不認爲當指向數據的指針就足夠時,你會想要在每條記錄中複製公共數據。 – Java42 2013-03-19 03:21:37