2011-03-06 72 views
0

我的任務需要使用以下鏈表結構:作業:C編程 - 結構和數組

 
     struct studentNode { 
     int  id; 
     char *fname; 
     char *lname; 
     int  programs[x]; 
     int  labs[x]; 
     int  exams[x]; 
     int  percent; 
     double grade; 

     struct studentNode *next; 
     }; 

我的問題是,被從文件中加載的程序,實驗室和檢查的陣列,並長度可變。

我試過使用指向數組的指針,但是每當我爲新學生更新數組時,它都會替換鏈接列表中每個人的分數。

我已經試過跟教練一起去了,他告訴我要谷歌它。 :(

到目前爲止,我還沒有得到任何運氣,它是超出了我們的書涵蓋範圍

任何幫助,將不勝感激

+0

向我們展示您已經編寫的一些代碼。 – abelenky 2011-03-06 19:10:52

+0

顯示屏有問題,現在就開始了。 – Andrew 2011-03-06 19:11:37

+0

當你說我每次更新array_時,你的意思是什麼? – sashoalm 2011-03-06 19:14:29

回答

2

從你的描述:。

你需要爲數組中的每個項目創建一個新對象

所以你首先創建一些東西來保存第一個項目(比如指向第一個項目的指針)然後當你加載每個項目時,創建新的studentNode然後將它添加到數組中。

0

聽起來好像您正在爲所有學生使用相同的陣列。你需要爲每個學生分配一個單獨的數組。

您可以靜態分配的元素的固定數量的二維數組:

int progs[Num_students][x]; 

在這種情況下,您需要點每個studentNodes陣列正確的數組(每名學生)。

studentNode1.programs = progs[studentNumber]; 

或者在每個學生的堆上分配一些內存。

studentNode1.programs = malloc(sizeof(int)*x); 
+0

我相信教練希望我們分配額外的內存。我會嘗試你的第二個建議。 – Andrew 2011-03-06 19:17:48

+0

沒有完全正確的,請看下面的代碼... – Andrew 2011-03-06 19:53:14

+0

不要在C中轉換malloc的返回值,這是不必要的,它可以消除您可能想要查看的編譯器警告。 (在需要強制轉換的polyglot C/C++代碼中是例外。) – 2011-03-06 19:54:37

0

確保每個studentNode不共享相同的programslabs等陣列。除了創建studentNode之外,您還必須在其中創建數組。

0

我相信你的問題是指如何指定程序,實驗室和考試數組的大小。

不是將數組存儲在struc中,而是保存一個指向數組的指針。然後,在結構之外構建程序數組(如果需要,使用malloc),將node.program指針重新分配給該數組。