当用户可以添加/编辑/搜索/列出客户时,我目前正在执行客户计划。我决定使用二叉树作为这个程序的主干。我的想法是在程序关闭之前将树中的每个项目保存到“customers.dat”,然后在启动时将文件中的所有内容加载到树中。到目前为止一切顺利,但是在最终设法将二叉搜索树保存到文件中之后,我遇到了一个错误。
假设我第一次添加了 3 个客户。然后我关闭程序,当我重新打开它时,我会在树中找到相同的 3 个客户。但是,下次我打开文件时,它给了我一个来自我的预定义错误的错误,当节点无法识别是向左还是向右时,可能是因为它是空的或不可比较的。这是一些代码片段。我还尝试使用 a+b 以外的其他文件打开技术,但没有出现此类错误,但是按照我设计程序的方式,我需要 append 方法,否则只会保存一条记录。
客户存储在 Cstmr 的标头中:
typedef struct customer
{
char Name[MAXNAME];
char Surname[MAXNAME];
char ID[MAXID];
char Address[MAXADDRESS];
} Cstmr;
别的:
void CustomerTreeToFile(Tree*pt)
{
if (TreeIsEmpty(pt))
puts("Nothing to save!");
else
Traverse(pt,saveItem); //Traverses each node, and appliess the function
//saveItem to each node
}
void saveItem(Cstmr C)
{
save = C;
customers = fopen("customers.dat","ab+");
fwrite(&C,sizeof (Cstmr), 1, customers);
fclose(customers);
}