You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TXT文件中的数据导入C程序并使用结构体存储?

嘿,我来帮你搞定这个TXT数据导入的事儿!既然你已经有了结构体,那接下来的步骤其实很清晰,我给你一步步拆解:

首先先确认下你的结构体应该是类似这样的吧?毕竟要对应你TXT里的三个字段:

typedef struct {
    char name[50];          // 存姓名,下划线连接的格式用字符数组完全没问题
    char term[20];          // 存任职时间,比如"1789-1797"
    char party[50];         // 存党派名称
} President;
方法一:用标准C文件操作快速导入(最适合你的格式)

你的TXT每行都是空格分隔的三个字符串,用fscanf直接读取是最高效的方式:

1. 打开文件并检查是否成功

一定要先做错误检查,避免后续操作崩溃:

FILE *file = fopen("presidents.txt", "r");
if (file == NULL) {
    perror("Failed to open file"); // 会自动输出具体错误原因,比如文件不存在
    return 1;
}

2. 读取数据到结构体数组

既然你明确知道是45行,直接定义固定大小的数组就行:

#define NUM_PRESIDENTS 45
President presidents[NUM_PRESIDENTS];

// 循环读取每一行的三个字段
for (int i = 0; i < NUM_PRESIDENTS; i++) {
    // %s会自动跳过空格,完美匹配你每行的格式
    if (fscanf(file, "%s %s %s", presidents[i].name, presidents[i].term, presidents[i].party) != 3) {
        printf("Error reading line %d\n", i+1);
        fclose(file); // 出错也要记得关文件
        return 1;
    }
}

3. 关闭文件并验证数据

读取完成后必须关闭文件释放资源,建议加个小循环验证下导入结果:

fclose(file);

// 打印前5条数据确认
for (int i = 0; i < 5; i++) {
    printf("No.%d: Name: %s | Term: %s | Party: %s\n",
           i+1, presidents[i].name, presidents[i].term, presidents[i].party);
}
方法二:逐行读取再解析(更灵活的方案)

如果担心未来TXT格式有小变动(比如姓名可能出现空格?不过你的示例里是下划线,这个方法更通用),可以先用fgets读整行,再用sscanf解析:

FILE *file = fopen("presidents.txt", "r");
if (file == NULL) {
    perror("Failed to open file");
    return 1;
}

President presidents[NUM_PRESIDENTS];
char line[150]; // 定义足够长的数组存整行内容
int i = 0;

while (fgets(line, sizeof(line), file) != NULL && i < NUM_PRESIDENTS) {
    // 解析整行数据,逻辑和fscanf一致
    if (sscanf(line, "%s %s %s", presidents[i].name, presidents[i].term, presidents[i].party) != 3) {
        printf("Error parsing line %d\n", i+1);
        fclose(file);
        return 1;
    }
    i++;
}

fclose(file);

这个方法的好处是可以先对整行做预处理(比如手动去掉换行符),后续格式调整起来更方便。

几个要注意的细节
  • 结构体里的字符数组长度要留够余量,避免数据溢出(比如姓名最长的"George_Washington",50个字符完全够用);
  • 如果TXT文件和程序不在同一目录,要写绝对路径(比如"/Users/you/Documents/presidents.txt");
  • 你的示例里都是英文,不用考虑编码问题;如果有非ASCII字符,可能需要用到宽字符处理,但目前完全没必要。

内容的提问来源于stack exchange,提问作者Sam Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:57