2017-10-24 18 views
0

私は関数を書く必要があります:関数を変更できません! `void list_courses()すべての受講者が登録したすべての受講番号を順番にリストします。どのように私はこの問題に近づきますか?リンクリストの内容を表示

+0

'head'はあなたの関数では定義されていないので、' head-> courses'は無効な参照です。学生リストはどこに定義されていますか?受講生のリスト(学生リストの最初のもの)へのポインタを 'list_courses'に渡す必要があります。 – lurker

+0

は 'void course(struct course * c)で始まる{ if(c == NULL){ printf(" No courses ");戻る; C:>次数;} } ''%s、% ''は、 – BLUEPIXY

答えて

0

あなたは関数void list_courses()を変更すべきではないと言いますが、すべての生徒とすべてのコースの繰り返しを開始するには、struct student *をどこかに配置する必要があります。最初の生徒は静的変数にしているようですが、静的変数を何らかの形で埋めると仮定します。ここで私はそれを行うだろう方法は次のとおりです。

static struct student *my_student; 

void list_courses(){ 

    struct student *current_student = my_student; 
    struct course *current_course; 

    // Iterate over all students 
    while(current_student != NULL){ 
     current_course = current_student->courses; 

     // do something with the current student if needed ... 

     // Iterate over courses of this student 
     while(current_course != NULL){ 

      // do something with current course ... 

      // Advance to the next course of this student 
      current_course = current_course->next; 
     } 

     // Advance to the next student 
     current_student = current_student->next; 
    } 
} 

このコードは、よりコンパクトかもしれないが、私は、明確にするために詳細なバージョンをしました。