2401_83423308 2024-04-01 20:18 采纳率: 92.3%
浏览 2
已结题

把结构体数据保存进文件,再从文件输出到屏幕的时候后两个数据缺失怎么解决

img


输出的数据是这样的:(只输出数学学院)
9 XT 数学学院 否 是 数学建模 A 是 1 0.250
4 CQ 数学学院 是 否 3个无 0.000
除了最后一行,其他数据都正常
最后一行数据应该是这样的:
4 CQ 数学学院 是 否 4个无 0.020
少了最后那个 无 和 0.020
怎么能正常输出后两个

  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-04-01 20:21
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的核心在于输出结构体数据到文件时,最后两个字段的数据未正确输出。这可能是因为在输出到文件时,格式化输出时的格式字符串不正确导致的。为了解决这个问题,可以采取以下步骤:

    1. 确保在将结构体数据输出到文件时,使用了正确的格式化字符串,特别是对于最后两个字段(“无”和浮点数)需要使用正确的格式来输出。
    2. 在读取文件时,也需要使用正确的格式化字符串来读取这两个字段的数据,确保能够正确地解析这些数据。
    3. 确保结构体中的数据在输出到文件之前已经正确地填充,没有缺失或错误的数据。
      下面是一个简单的示例代码,展示了如何正确地输出和读取包含结构体的数据到文件中:
      cCopy code
      #include <stdio.h>
      struct College {
      int id;
      char code[3];
      char name[20];
      char has_major;
      char has_minor;
      char major[20];
      char has_minor;
      char minor[20];
      int num_students;
      float ratio;
      };
      int main() {
      struct College colleges[] = {
      {9, "XT", "数学学院", '否', '是', "数学建模", 'A', '是', "无", 1, 0.25},
      {4, "CQ", "数学学院", '是', '否', "无", '无', "无", 4, 0.02}
      };
      FILE *fp = fopen("colleges.txt", "w");
      if (fp == NULL) {
      printf("无法打开文件\n");
      return 1;
      }
      for (int i = 0; i < sizeof(colleges) / sizeof(struct College); i++) {
      fprintf(fp, "%d %s %s %c %c %s %c %s %d %f\n",
      colleges[i].id,
      colleges[i].code,
      colleges[i].name,
      colleges[i].has_major,
      colleges[i].has_minor,
      colleges[i].major,
      colleges[i].has_minor,
      colleges[i].minor,
      colleges[i].num_students,
      colleges[i].ratio);
      }
      fclose(fp);
      // 读取并打印文件内容
      fp = fopen("colleges.txt", "r");
      if (fp == NULL) {
      printf("无法打开文件\n");
      return 1;
      }
      while (fscanf(fp, "%d %s %s %c %c %s %c %s %d %f\n",
      &colleges[0].id,
      colleges[0].code,
      colleges[0].name,
      &colleges[0].has_major,
      &colleges[0].has_minor,
      colleges[0].major,
      &colleges[0].has_minor,
      colleges[0].minor,
      &colleges[0].num_students,
      &colleges[0].ratio) != EOF) {
      printf("%d %s %s %c %c %s %c %s %d %f\n",
      colleges[0].id,
      colleges[0].code,
      colleges[0].name,
      colleges[0].has_major,
      colleges[0].has_minor,
      colleges[0].major,
      colleges[0].has_minor,
      colleges[0].minor,
      colleges[0].num_students,
      colleges[0].ratio);
      }
      fclose(fp);
      return 0;
      }
      
      这段代码中,我们使用了正确的格式化字符串来输出和读取结构体中的数据,并确保了数据的完整性和正确性。您可以根据自己的需求进行调整和扩展。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)