保存到txt文件链表

时间:2014-01-22 14:14:08

标签: c file linked-list

好的,所以这是我的问题我正在试图弄清楚如何将我的单链表写入文件,不知道我应该使用什么,所以我去了txt文件和fprintf不确定它是否有好处,如果有人能告诉哪种方式会更好,解释会很好。回到我的代码我有问题保存到文件basicaly我的功能保存第一个客户端的项目,但不是第二个客户端。我做错了什么?如果我的代码的其余部分是必要的,我可以发布它,但它就像500行。

struct item
{
    char item_name[30];
    char item_state[30];
    double item_price;
    char item_status[30];
    double item_price_if_not;
    struct item *next;
};
struct client
{
    char client_name[30];
    char client_last_name[30];
    struct item *item_data;
    struct client *next;
};




void savetxt(struct client *head)
{
    FILE *f;
 f = fopen("data.txt","w");
   if(f == NULL)
   {
       printf("error");
   }
    struct item *CurrentItem = head->item_data;
    while(head != NULL)
    {
        printf("try");
        fprintf(f,"%s\n",head->client_name);
        fprintf(f,"%s\n",head->client_last_name);
        while(CurrentItem != NULL)
        {
            printf("tryitem");
            fprintf(f,"%s\n",CurrentItem->item_name);
            fprintf(f,"%s\n",CurrentItem->item_state);
            fprintf(f,"%fp\n",CurrentItem->item_price);
            fprintf(f,"%s\n",CurrentItem->item_status);
            fprintf(f,"%fp\n",CurrentItem->item_price_if_not);
            CurrentItem = CurrentItem->next;
        }
        head = head->next;
        fprintf(f,"\n\n");
    }
    fclose(f);
    return NULL;
}

1 个答案:

答案 0 :(得分:1)

在设置新的CurrentItem之后,您需要在外部while循环的末尾更新head

...
head = head->next;
CurrentItem = head->item_data;
...

否则,CurrentItem用于扫描第一个客户端的项目列表,然后永远不会重置为下一个客户端项目的开头。

修改

实际上最好在CurrentItem循环的开头设置while,否则当head为NULL时CurrentItem = head->item_data将失败:

while (head != NULL) {
    CurrentItem = head->item_data;
    ...
}