问题出现情况是: 第一次运行(文件为空的时候)可以正常操作,手动输入信息以后可以查看所有图书信息 但是当关闭运行框以后,文件中显示已经录入信息了,再次编译运行就没有任何结果了…
代码是这样的 有些功能还没有写完 但不影响测试文件这一步
还有个头文件
第二次运行时运行不出来的结果是这样
大佬们帮帮我😭😭😭
读文件的时候用,分隔确实存在问题,需要先读出一行来以后,再自己解析,有时候fscanf()确实不好用。我之前写了一个解析数据行的代码,贴给你,修改一下就能用了。
除此之外,57行读文件函数中,if(fp ==NULL)直接return就可以了,不要在用w模式打开了。
//解析数据行,buf是从文件中读取的一行,后面的都是需要解析出来的内容
int Parser(char *buf, char carid[],int *type,int* pd,int *pm,int* py,char gid[],char nm[],char ph[],int* year,int *mon,int *day)
{
int posstart = 0;
int i=posstart;
char tmp[6] = {0};
if (strlen(buf) ==0 )
{
return 0;
}
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memcpy(carid,buf+posstart,i-posstart);
//类型
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memcpy(tmp,buf+posstart,i-posstart);
*type = atoi(tmp);
//日租金
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*pd = atoi(tmp);
//月租金
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*pm = atoi(tmp);
//年租金
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*py = atoi(tmp);
//用户ID
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memcpy(gid,buf+posstart,i-posstart);
//用户名
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memcpy(nm,buf+posstart,i-posstart);
//用户电话
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memcpy(ph,buf+posstart,i-posstart);
//年
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*year = atoi(tmp);
//月
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*mon = atoi(tmp);
//日
i++;
posstart = i;
while(buf[i] != '\0' && buf[i]!= ',')
i++;
memset(tmp,0,6);
memcpy(tmp,buf+posstart,i-posstart);
*day = atoi(tmp);
return 1;
}