void save(int num,GuestLinke * g) { if(g->number == num) { FILE * fp = fopen("orders.txt","w"); if(fp = NULL) { printf("open ERROR!"); return; } while(g != NULL) { fprintf(fp,"%s %d %s %d",g->name,g->sum,g->time,g->number); } fclose(fp); printf("订单保存成功!\n"); } else { if(g->next->number == num) { FILE * fp = fopen("orders.txt","w"); if(fp = NULL) { printf("open ERROR!"); return; } while(g->next != NULL) { fprintf(fp,"%s %d %s %d",g->next->name,g->next->sum,g->next->time,g->next->number); } fclose(fp); printf("订单保存成功!\n"); } else { if(g->next->next == NULL) { printf("抱歉,没有找到相应订单。\n"); } else { save(num,g->next); } } } }请改进以上代码。
时间: 2024-02-23 11:01:18 浏览: 60
ff.rar_C++ FILE* ff_ff文件系统_文件操作_精简文件系统
以下是改进后的代码:
```c
void save(int num, GuestLink *g) {
GuestLink *target = NULL;
GuestLink *pre = NULL;
GuestLink *p = g;
while (p != NULL && p->number != num) {
pre = p;
p = p->next;
}
if (p == NULL) {
printf("抱歉,没有找到相应订单。\n");
return;
} else {
target = p;
if (pre != NULL) {
pre->next = p->next;
} else {
g = p->next;
}
}
FILE *fp = fopen("orders.txt", "w");
if (fp == NULL) {
printf("open ERROR!");
return;
}
while (target != NULL) {
fprintf(fp, "%s %d %s %d\n", target->name, target->sum, target->time, target->number);
target = target->next;
}
fclose(fp);
printf("订单保存成功!\n");
}
```
改进点:
1. 使用了一个 `GuestLink` 指针 `target` 来指向目标节点,避免了对文件的多次打开和关闭操作。
2. 在查找目标节点时,同时记录下其前驱节点 `pre`,方便链表节点的删除操作。
3. 对于文件打开操作,使用了 `fp == NULL` 来判断是否打开成功,避免了使用 `fp = NULL` 的错误。同时,在 `fprintf` 函数中加入了 `\n`,使输出的内容更加清晰。
阅读全文