宁倾 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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题