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 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退