c語言鍊錶讀取檔案,程式沒法執行,求幫忙,急急急

2022-12-26 19:25:54 字數 3027 閱讀 8339

1樓:名了孔明

先把鍊錶裡面的資料存在e盤,以二進位制形式存的然後再在程式中讀取那些資料,輸出後能輸出資料,但在資料後面會有亂碼,然後程式出錯停止執行。

存資料程式**:

fp=fopen("e:\\student","wb」);

while(p1!=null)

printf("存檔成功!以存在e:\\student中。\n");

讀取**:

fp=fopen("e:\\student","rb");

while(1)

p0=(struct std*)malloc(len);

fread(p0,len,1,fp);

insert(p0); //這個是插入鍊錶的函式,無誤這個是存資料的結構體:

struct std

2樓:

沒法執行有以下幾點原因:

首先主函式裡面

if ((fp=fopen("medical.txt","r"))==null)//判斷是否等於null,這裡是==,而不是=

printf("cannot open file\n");

exit(0);

2.creat函式裡面,你也應該定義檔案指標fp,而你沒有定義,當然,你可以把主函式裡面的指標當做creat的引數,傳遞進來。

c語言鍊錶檔案讀取問題 20

3樓:匿名使用者

問題就在於你存這個結構體的時候,把struct std *pnext也存進去了,但這個pnext下次讀出來的時候可能是乙個無效的位址,沒看到insert函式是如何實現的,是否對這個值進行了處理,否則用這個指標做為鏈的話肯定出錯。

4樓:相思丶貓

p0指向鍊錶中最後乙個節點,讀到檔案結尾時,feof返回1,於是執行if語句,此時free(p0),豈不是把鍊錶最後乙個節點刪掉了,導致鍊錶最後不指向null,被free的節點位址已經不能訪問,但你卻訪問了,所以程式會出錯。

5樓:匿名使用者

//很簡單,給個單鏈表的例子,首先定義鍊錶成員的結構體 ;

struct filetext;

//讀取檔案,並插入進鍊表的函式,filename為要讀取的檔名,head為鍊錶的頭節點,函式返回插入新節點後鍊錶的頭節點;

struct filetext * readfile(char * filename,struct filetext * head)

//然後開始讀取檔案,放到new的buf中

if(fread(new->buf,bufsize,1,fp)<1)

fclose(fp);

//檔案讀取完後,進行鍊錶操作

if(!head)//如果傳進來的head是個空指標,那麼新指標就作為頭節點返回

while(p->next) p = p->next;//把p移動到最後乙個節點

p->next = new;//p的下乙個節點為new

new->next = null;//new的下乙個節點為空

return head;

}//這樣這個函式就完成了,可以寫個主函式,定義乙個頭節點,完成。

6樓:匿名使用者

那麼你就把float改成double,因為系統一般把float換成double,如果你的編譯器給你這麼做了,那麼你的資料從score後就是錯的,可能是你的結構體錯了,我沒看到具體程式不好說

c語言如何從檔案讀入,並存放在鍊錶中 20

7樓:阿豪呦

//舉個單鏈表的例子,首先定義鍊錶成員的結構體

struct filetext;

//讀取檔案,並插入進鍊表的函式,filename為要讀取的檔名,head為鍊錶的頭節點,函式返回插入新節點後鍊錶的頭節點

struct filetext * readfile(char * filename,struct filetext * head)

//然後開始讀取檔案,放到new的buf中

if(fread(new->buf,bufsize,1,fp)<1)

fclose(fp);

//檔案讀取完後,進行鍊錶操作

if(!head)//如果傳進來的head是個空指標,那麼新指標就作為頭節點返回

while(p->next) p = p->next;//把p移動到最後乙個節點

p->next = new;//p的下乙個節點為new

new->next = null;//new的下乙個節點為空

return head;

//這樣這個函式就完成了,你可以寫個主函式,定義乙個頭節點,試下。

8樓:定你個

//很簡單,給你個單鏈表的例子,首先定義鍊錶成員的結構體

struct filetext;

//讀取檔案,並插入進鍊表的函式,filename為要讀取的檔名,head為鍊錶的頭節點,函式返回插入新節點後鍊錶的頭節點

struct filetext * readfile(char * filename,struct filetext * head)

//然後開始讀取檔案,放到new的buf中

if(fread(new->buf,bufsize,1,fp)<1)

fclose(fp);

//檔案讀取完後,進行鍊錶操作

if(!head)//如果傳進來的head是個空指標,那麼新指標就作為頭節點返回

while(p->next) p = p->next;//把p移動到最後乙個節點

p->next = new;//p的下乙個節點為new

new->next = null;//new的下乙個節點為空

return head;

}//這樣這個函式就完成了,你可以寫個主函式,定義乙個頭節點,試下

c語言鍊錶問題。。求解答 執行不了

9樓:借風而行

void main 不是void mian

入口函式寫錯了

關於c語言鍊錶的問題,關於C語言鍊錶的問題

slist是你定義的結構體的名稱,你寫的動態記憶體分配,意思是申請乙個指向slist的slist記憶體空間的指標,沒有這個名稱,就相當於乙個人沒了名字,幹什麼都不方便 slist就是nde的別名 因為你用到關鍵字typedef typedef是給型別取別名之意 如 typedef unsigned ...

C雙向鍊錶刪除操作,C語言編寫雙向鍊錶刪除

node tmpnode node next next free node next free了已經node next tmpnode 在這你又繼續使用了node next pre node 在這 你也使用了 所以 會出錯 在使用鍊錶的時候 要判斷他是否存在 不為空 再用 也就是進行安全性檢測 首先...

哪位大神幫我把C語言鍊錶程式都注釋上語句,看不懂,急用,謝謝

include include typedef struct word word 建立鍊錶,向裡面輸入文字資料列印出鍊錶的所有節點的資料 while p p next null 遍歷鍊錶 printf n 哪位高手給我詳解下c語言鍊錶的原理和關鍵操作,一直都搞不懂的哦。你把鍊錶當作火車.車廂就是資料...