项目是做一个酒店餐厅点菜系统。商家先将菜单录入系统(我用的inputbox函数获取输入的信息)
,点击我自己画的保存按钮程序可以将链表中的内容写入到文件中,但是这个写入的时候会出问题,找了两天都没找出来到底哪里有问题,请大佬指教。
结构体链表:
typedef struct Food_LIST
{
int ser;
char name[20];
char price_f[20];
struct Food_LIST* fnext;
}Food_LIST;//结点
//食品链表的控制部分
typedef struct list_of_food
{
Food_LIST* head_fl;
Food_LIST* nail_fl;
int count_f;
}lfood;
程序刚开始执行会先开辟一块控制链表的lfood空间,初始化函数:
int Initlist_F(lfood** plf)
{
*(plf) = (lfood*)malloc(sizeof(lfood));//首先开辟一块堆区空间(链表控制区的空间)
if (*plf == NULL)
return 0; //开辟空间失败,返回0
else
{
(*plf)->head_fl = NULL;
(*plf)->nail_fl = NULL;
(*plf)->count_f = 0;
}
return 1;
}
进入菜单编辑界面的函数:
void edit_foodlist(lfood*pf)
{
Food_LIST* fptemp;
MOUSEMSG m1;
fptemp = creat_F_node();
inser_F(pf, fptemp);
while (1)
{
m1 = GetMouseMsg();
if ((m1.uMsg == WM_LBUTTONDOWN) && (m1.x >= 80 && m1.x <= 307) && (m1.y >= 43 && m1.y <= 207))//添加菜
{
InputBox(pf->nail_fl->name, 20, "请输入菜的名字");
InputBox(pf->nail_fl->price_f, 20, "请输入菜的价格");
fptemp = creat_F_node();
inser_F(pf, fptemp);
continue;
}
if (m1.uMsg == WM_LBUTTONDOWN && (m1.x >= 80 && m1.x <= 307) && (m1.y >= 452 && m1.y <= 677))//保存菜单
{
travellist_F(pf,save_F);
}
}
}
下面就是那个遍历链表,对其中每个节点进行操作的函数
int Initlist_F(lfood** plf)
{
*(plf) = (lfood*)malloc(sizeof(lfood));//首先开辟一块堆区空间(链表控制区的空间)
if (*plf == NULL)
return 0; //开辟空间失败,返回0
else
{
(*plf)->head_fl = NULL;
(*plf)->nail_fl = NULL;
(*plf)->count_f = 0;
}
return 1;
}
保存进入文件的函数:
void save_F(Food_LIST* pf)
{
FILE* ptemp2 = fopen("食品菜单二进制.txt", "wb");
FILE* temp = fopen("食品菜单.txt", "w");
fwrite(pf, sizeof(Food_LIST), 1, ptemp2);
fputs(pf->name, temp);
fputs(pf->price_f, temp);
/*fwrite(pf, sizeof(Food_LIST), 1, ptemp2);
fwrite(pf, sizeof(Food_LIST), 1,temp);*/
fclose(temp);
temp = NULL;
}
说一下为什么要写到两个不同的文件里, 因为一个要以文本形式写入,这个文件到时候会直接打开让客户看里面的内容,而那个二进制文件到时候会读取到程序里面。
用inputbox输入完函数之后,点击保存就会有这样的错误
真的找不到问题出在哪了,救救孩子吧555555