#include <stdio.h> #include <malloc.h> #define N 20 struct cheweixinxi //车位信息 { int bianhao; //车位编号 char weizhi[20]; //车位位置 int zhuangtai; //车位状态,0 表示空闲,1 表示已被占用 struct cheweixinxi *next; }; int main() { void cheweixinxi(); return 0; } //车位信息初始化 void cheweixinxi() { struct cheweixinxi *head2; struct cheweixinxi *pr,*p; for(int i=0;i<N;i++) { p=pr=(struct cheweixinxi *)malloc(sizeof(struct cheweixinxi)); p->bianhao=i+1; sprintf(p->weizhi,"Location %d",i+1); p->zhuangtai=0; FILE *fp; fp = fopen("车位信息.txt", "ab+"); if(fp==NULL) { printf("\t\t\t\t打开文件失败!\n"); exit(1); } if(head2==NULL) { head2=p; } else { pr->next=p; pr=p; } fprintf(fp, "%d %s %d\n", pr->bianhao, pr->weizhi,pr->zhuangtai); } pr->next=NULL; fclose(fp); }为什么fclose(fp)错误
时间: 2024-02-05 22:02:44 浏览: 62
在`cheweixinxi()`函数中,`fp`指向的文件指针是在循环中打开的,每次循环都会重新打开一次,最后在循环结束后只关闭了最后一次打开的文件指针,而前面打开的文件指针没有关闭。应该在每次循环中打开文件后,再在循环结束时关闭文件指针。
可以将打开文件和关闭文件的操作放在同一个循环中,如下所示:
```c
void cheweixinxi() {
struct cheweixinxi *head2 = NULL;
struct cheweixinxi *pr = NULL, *p = NULL;
for (int i = 0; i < N; i++) {
p = pr = (struct cheweixinxi *)malloc(sizeof(struct cheweixinxi));
p->bianhao = i + 1;
sprintf(p->weizhi, "Location %d", i + 1);
p->zhuangtai = 0;
FILE *fp = fopen("车位信息.txt", "ab+");
if (fp == NULL) {
printf("\t\t\t\t打开文件失败!\n");
exit(1);
}
if (head2 == NULL) {
head2 = p;
} else {
pr->next = p;
pr = p;
}
fprintf(fp, "%d %s %d\n", pr->bianhao, pr->weizhi, pr->zhuangtai);
fclose(fp);
}
pr->next = NULL;
}
```
这样就可以避免文件指针没有关闭的问题了。
阅读全文