gyn1132781055 2015-12-09 16:05 采纳率: 14.3%
浏览 1465
已采纳

window下 c++向文件中存入多条记录时出现异常

我用c++写了一个 Book的结构体,想要把Book的信息存入文件中,利用fwrite向文件
中写入的时候,我循环了100次,也就是向文件中存入了100本书,可是往外读取的时候,
前25本正常,后面就乱了,是在搞不明白哪里出问题了,但是在linux下运行正常。以下是代码,其中save()为文件操作
void addBooksByBatch(int k) {
for (int i = 1; i < k; i++) {
BookInfo bookInfo;
sprintf(bookInfo.name, "%d", i);
sprintf(bookInfo.writer, "%d", i);
sprintf(bookInfo.press, "%d", i);
bookInfo.ISBN = i;
bookInfo.price = 20;
bookInfo.exist = 1;
save(bookInfo, 5);
}
}
void save(BookInfo bookInfo, int num) { //num表示书的本数
FILE *bookFile = fopen("book", "ab+");
fseek(bookFile, 0, SEEK_END);
int position = ftell(bookFile);
bookInfo.index = position;
Book book;
book.exist = 1;
book.flag = 1;

for (int i = 0; i < num; i++) {
    book.callnumber = bookInfo.ISBN * N + i;
    if (i == num - 1) {
        book.next = -1;
    }
    else {
        book.next = position + BOOK_SIZE;
    }
    fwrite(&book, BOOK_SIZE, 1, bookFile);
    position = ftell(bookFile);
}
fclose(bookFile);

FILE *bookInfoFile = fopen("bookinfo", "ab+");
fwrite(&bookInfo, BOOKINFO_SIZE, 1, bookInfoFile);
fclose(bookInfoFile);
cout << "图书添加完毕" << endl;

}

  • 写回答

5条回答 默认 最新

  • ysuwood 2015-12-13 15:56
    关注

    你这是按二进制格式读写,修改下面两句话就行了。

        FILE *bookInfoFile = fopen("bookinfo", "wb");
    
    
            FILE *p = fopen("bookinfo","rb");
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 写uniapp时遇到的问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流