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

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大