鱼C论坛

 找回密码
 立即注册
查看: 1335|回复: 1

导入

[复制链接]
发表于 2023-12-15 08:19:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. void ImportPlayer(Player players[], int* num_players)
  2. {
  3.         int i = 0;
  4.         FILE* file = fopen("info.txt", "r");
  5.         if(file = NULL)
  6.         {
  7.                 printf("无法打开文件!\n");
  8.                 return;
  9.         }
  10.         fscanf(file, "%d", num_players);
  11.         for(i = 0; i < *num_players; i++)
  12.         {
  13.                 fscanf(file, "%20s\t%21s\t%10s\t%12s\t%18s\n", players[i].id, players[i].name, players[i].identity, players[i].rank, players[i].score);
  14.         }
  15.         fclose(file);
  16.         file = NULL;
  17.         printf("棋手信息导入成功!\n");
  18. }
复制代码


导入之后为什么导入的信息运行时显示不了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 08:19:42 | 显示全部楼层
在您的代码中,存在两个问题导致导入的信息无法正确显示。

首先,文件打开函数应该是 `fopen`,而不是 `file`。所以,您需要将代码中的 `if(file = NULL)` 修改为 `if(file == NULL)`,以正确判断文件是否成功打开。

其次,您在导入数据时使用了 `%20s`、`%21s`、`%10s`、`%12s`、`%18s` 这样的格式化字符串,这会导致导入数据时出现格式不匹配的问题。因为 `%s` 只能用于字符串导入,而不能限定字符串的长度。所以,您需要修改导入数据的代码,使用 `fgets` 函数逐行读取文件内容,并使用 `sscanf` 函数进行解析。

下面是修改后的代码:
  1. void ImportPlayer(Player players, int* num_players)
  2. {
  3.     int i = 0;
  4.     FILE* file = fopen("info.txt", "r");
  5.     if(file == NULL)
  6.     {
  7.         printf("无法打开文件!\n");
  8.         return;
  9.     }
  10.     fscanf(file, "%d", num_players);
  11.     char line[100];  // 假设每行最多有100个字符
  12.     fgets(line, sizeof(line), file);  // 读取并忽略第一行
  13.     for(i = 0; i < *num_players; i++)
  14.     {
  15.         fgets(line, sizeof(line), file);  // 逐行读取文件内容
  16.         sscanf(line, "%20s\t%21s\t%10s\t%12s\t%18s\n", players[i].id, players[i].name, players[i].identity, players[i].rank, players[i].score);
  17.     }
  18.     fclose(file);
  19.     file = NULL;
  20.     printf("棋手信息导入成功!\n");
  21. }
复制代码

修改后的代码使用 `fgets` 函数逐行读取文件内容,并将每一行的内容存储在 `line` 字符数组中。然后,使用 `sscanf` 函数对 `line` 中的内容进行解析,将每个字段赋值给相应的 `players` 结构体成员。

请确保您的 `Player` 结构体定义正确,并根据实际需要调整字符数组 `line` 的大小。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 11:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表