C语言图书管理系统文件读不出来是怎么回事

问题出现情况是: 第一次运行(文件为空的时候)可以正常操作,手动输入信息以后可以查看所有图书信息 但是当关闭运行框以后,文件中显示已经录入信息了,再次编译运行就没有任何结果了…

代码是这样的 有些功能还没有写完 但不影响测试文件这一步

img 还有个头文件

img

第二次运行时运行不出来的结果是这样

img

大佬们帮帮我😭😭😭

读文件的时候用,分隔确实存在问题,需要先读出一行来以后,再自己解析,有时候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;
}