好的,所以这是我的问题我正在试图弄清楚如何将我的单链表写入文件,不知道我应该使用什么,所以我去了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;
}
答案 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;
...
}