这段代码存在一个常见错误:在 while 循环中,先读取了一组数据再判断文件是否结束,所以会多读取一次数据,导致最后一个数据被读取两次。

解决方法是先判断文件是否结束再进行读取操作。将 fscanf 语句移到 while 循环的条件判断语句之后,避免在文件末尾时多读取一次数据。

此外,还应该添加对打开文件是否成功的判断。如果文件打开失败,应该给出相应的错误提示并结束程序。

以下是对代码的优化建议:

int readFile(struct con con[]) {
  int i = 0;
  FILE *fl;
  fl = fopen('test.txt', 'r');
  if (fl != NULL) {
    while (!feof(fl)) {
      fscanf(fl, '%s %c %s%s%d-%d-%d', con[i].name, &con[i].sex, con[i].add, con[i].tel, &con[i].birth.year, &con[i].birth.month, &con[i].birth.day);
      i++;
    }
    fclose(fl);
  } else {
    printf('打开文件失败!\n');
  }
  return i;
}

优化后的代码

  1. 将 fscanf 语句移动到 while 循环的条件判断语句之后,避免在文件末尾时多读取一次数据。
  2. 添加对打开文件是否成功的判断,如果文件打开失败,给出错误提示并结束程序。

通过这些改进,代码能够更加安全可靠地读取文件内容,避免错误发生。

C语言代码读取文件错误分析及解决方法

原文地址: https://www.cveoy.top/t/topic/n46L 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录