2015-03-03 74 views
0

我想寫一個單獨的行鏈接列表中的所有整數值,我有一個開始,但多個錯誤,我不知道從哪裏去。C寫一個鏈接列表到一個文件

struct ListNode { 
    int value; 
    struct ListNode * next; 
};   

int llist_save(LinkedList * list, char * file_name) { 
    ListNode *e = list->head; 
    FILE * fd = (file_name, "w"); 
    while(e != NULL){ 
     fprintf(fd, "%d\n", e->value); 
     e = e->next; 
    } 
    fclose(fd); 
} 
+1

它可能有助於提供錯誤,但首先檢查如何打開文件。 – bereal 2015-03-03 04:18:09

+0

「ListNode * e = list-> head;」應該是「struct ListNode * e = list-> head;」除非你使用typedef作爲結構聲明。這同樣適用於llist_save()函數中的參數LinkedList *列表。 – mevqz 2015-03-03 04:20:18

+0

請參閱:[**寫入鏈接列表到二進制文件(C)**](http://stackoverflow.com/questions/19444803/writing-a-linked-list-to-binary-filec)和[**使用fwrite將鏈接列表中的數據寫入二進制文件中(http://stackoverflow.com/questions/19435767/writing-data-from-a-linked-list-to-a-binary-file-using -fwrite) – 2015-03-03 05:03:28

回答

0

使用fopen();嘗試:

struct ListNode { 
     int value; 
     struct ListNode * next; 
};   

int llist_save(LinkedList * list, char * file_name) { 
    struct ListNode *e = list->head; 
    FILE * fd = fopen(file_name, "w"); 
    while(e != NULL){ 
     fprintf(fd, "%d\n", e->value); 
     e = e->next; 
    } 
    fclose(fd); 
} 
0

首先,你需要檢查兩件事情:

當你聲明的結構,你基本上是定義一個定製的用戶類型。 因此,每次您想要創建該類型的新變量時,都需要在結構的名稱前加上保留字struture。根據你的代碼,這將是這樣的:struct ListNode *e;

然後,你試圖發送到你的函數LinkedList參數。但是,如果你發送一個struct ListNode *參數,我認爲更容易,所以通過這種方式你將「知道」列表中的第一個元素是什麼。但是,您使用的方法也是有效的。

談到功能,你正在聲明一個int返回類型的函數。在你的代碼中,你沒有輸入return聲明。如果您不想返回值,只需將返回類型更改爲void即可。否則,只返回一個整數。

最後只需使用fopen,這是一個可以幫助您在系統中打開文件的功能。該函數中的第一個參數是要打開/創建的文件的名稱,第二個參數是要打開它的「方式」(技術上稱爲「模式」)。只需發送「w」,這意味着寫。

你說你想寫一個單行的值。要做到這一點,請在您的打印語句中省略\n字符並打印一個' '(空格字符)。

一些代碼:

struct ListNode 
{ 
    int value; 
    struct ListNode * next; 
};   

void llist_save(LinkedList * list, char * file_name) 
{ 
    struct ListNode *e = list->head; 
    FILE * fd = fopen(file_name, "w"); 

    while(e != NULL) { 
     fprintf(fd, "%d ", e->value); 
     e = e->next; 
    } 
    fclose(fd); 
} 

我的大腦不能處理英語非常好,現在,對於那個很抱歉。

相關問題