首页 > 解决方案 > 不正确的二进制文件读取

问题描述

我是 C 新手,正在尝试将结构读取和写入 .dat 文件。添加数据时,我会看到 .dat 文件中的字符。但是,我无法读取数据,并且我的代码在每次出现结构时都应该输出“val”时什么也不输出。

我查看了许多来源,但我找不到我的代码与那些有什么不同。

https://www.geeksforgeeks.org/readwrite-structure-file-c/ 该网站用于初步了解如何执行此操作。

读/写 C 中的二进制文件 我用它来查看如何修复我的代码,但解决方案没有帮助。

我尝试更改 while 循环中的语句。

struct person
{
    int id;
    char lastName[15];
    char firstName[15];
    char age[4];
};


int main(void) {
  //create new file
  FILE *fp = fopen("file.dat", "wb+");

  struct person a = {10, "Smith", "John", 25};
  fwrite(&a, sizeof(a), 1, fp);

  struct person b = {2, "Ali", "Jon", 12};
  fwrite(&b, sizeof(b), 1, fp);

 struct person c = {19, "Walter", "Martha", 82};
  fwrite(&c, sizeof(c), 1, fp);

  struct person p; 
  while(fread(&p, sizeof(p), 1, fp))
  printf("val");
}

目前,它应该打印 3 个“Vals”,因为 dat 文件中添加了三个人。但是,没有任何东西被打印出来。

我很感激帮助。

标签: c

解决方案


当您完成写入记录时,文件指针(“光标”,您正在读取/写入的位置)位于文件末尾。rewind()您必须使用或在尝试从文件中读取之前fseek()将该位置设置回文件的开头。fsetpos()


推荐阅读