宁倾 2018-11-02 14:47 采纳率: 0%
浏览 1140
已结题

C语言写入数据到二进制文件失败

相关代码如下

我在add()调用lessondatewrite()写进去了

#但是lessondateltater()调用lessondatewrite()没写进去

调试结果图片说明

#运行结果 英语行的 40 应该变成39
图片说明

 typedef struct  //定义一个Lesson类型的结构体
    {
        char name[50];
        char techer[50];
        char location[50];
        char time[50];
        int number;
    }LESSON;
     /*课程结构体参数
    课程名   char    50字节
    授课老师 char    50字节
    位置     char    50字节
    开课时间 char    50字节
    座位数 int       4字节
    结构体大小总计   204字节*/
LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针
{
    fflush(fl);//刷新缓存区  使将要输入的数据写入硬盘  一次性输入大量数据时使用  避免输入失败
    fwrite(&date,sizeof(LESSON),1,fl);
}
void add()//添加一个课程数据
{
    FILE *lessondate;
    LESSON lesson={0};// 声明一个LESSON类型的变量为lesson
     if((lessondate=fopen("lessondate","rb+"))==NULL)//若文件不存在,则建立文件
    {
        lessondate=fopen("lessondate","wb+");
        //rb+打开二进制文本文件,允许读写,若不存在返回空
        //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建
    }
    printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx),座位数(各数据以空格隔开,回车结束)\n");
    scanf("%s %s %s %s %d",&lesson.name,&lesson.techer,&lesson.location,&lesson.time,&lesson.number);
    //scanf在接收字符串时  不会接收空白符(空格与回车)  逗号或其他都能接收
    //%s不能使用char  而是char[]
    fseek(lessondate,0L,SEEK_END);
    lessondatewrite(lessondate,lesson);
    fclose(lessondate);
    system("cls");
    admin();
}
void lessondatelater(int choose)
{
    FILE *lessondate;
    LESSON lesson={0};
    int i;
    lessondate=fopen("lessondate","rb+");
     for(i=0;i<choose;i++)
    {
        lesson=lessondateread(lessondate);//给读取函数传递一个文件指针     假定有是三个结构体A B C  循环结束后光标在C前面B后面
    }
    fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面
    lesson=lessondateread(lessondate);//读取这个结构体数据  读取B的数据 此时光标前进到C前面
    lesson.number--;//修改结构体数据
    fseek(lessondate,-204L,SEEK_CUR);//后退到上一个结构体 此时光标在B前面
    lessondatewrite(lessondate,lesson);//写入修改后结构体数据  覆盖B
}

  • 写回答

1条回答 默认 最新

  • devmiao 2018-11-03 07:00
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境