2013-01-20 97 views
1

我正在創建鏈接列表,然後將其寫入文件並再次讀取。我使用fwrite和fread一次編寫和讀取結構的整個實例。但問題是它不能正常工作。我想在看到輸出文件後寫入工作正常,但仍然不確定。但是閱讀不起作用。從文件中動態讀取結構時,fread無法工作

下面是結構

struct student 
{ 
int roll_num; 
char name[100]; 
struct student *next; 
}; 

下面是邏輯

ifd = fopen("qwer1234.txt","wb"); 
struct student *temp; 
temp = start; 
while(temp != NULL) 
{ 
    fwrite(temp, sizeof(struct student), 1, ifd); 
    temp = temp->next; 
} 
close(ifd); 


ifd = fopen("qwer1234.txt","rb"); 
temp = NULL; 
temp = malloc(sizeof(struct student)); 
fread(temp, sizeof(struct student), 1, ifd); 
start = temp; 
//temp->next = NULL; 
printf("%s\t%d\n",temp->name,temp->roll_num); 
temp = malloc(sizeof(struct student)); 
/*while(fread(temp, sizeof(struct student), 1, ifd) == 1) 
{ 

    temp->next = start; 
    start = temp; 
    printf("%d/n",temp->roll_num); 
    temp = malloc(sizeof(struct student)); 

}*/ 
close(ifd); 

我雖然只讀單一實例的時間時,它仍然沒有工作。沒有任何東西存儲在temp-> name中,0存儲在temp-> roll_num中。我堅持了最後4個小時。我可以通過單獨存儲結構的元素來做到這一點,但這次想以另一種方式來完成。

對於所有對他們而言重要的人,這是一個家庭作業問題。

任何幫助將不勝感激。謝謝:)

回答

1

對於初學者來說,

close(ifd); 

是不正確的,因爲它不是一個描述符,它是一個FILE*。用途:

fclose(ifd); 

既然你不沖水,除非它是一個相當大名單的機會都還未有任何書面和你是新的分配將在列表中唯一的一個,因爲你在你的文件中沒有數據然而。

+0

我沒有話要對你說。那是我想到過去那麼多小時的想法的時刻之一。我本來可以睡幾個小時。謝謝你的伴侶。它真的解決了我的問題。公牛的眼睛。 – Sahil

+0

@Sahil不用擔心,先生。在我爲你的代碼設置單元測試之前,我沒有親自理解它,因爲我看不出有什麼問題= P – WhozCraig

+0

你能告訴我更多關於單元測試嗎? – Sahil