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

如何为基于结构体数组的电影信息C程序实现文本文件自动输入?

实现从文本文件自动读取电影数据的C程序

要实现输入自动化,咱们只需要把原来从键盘读取数据的逻辑,改成从预定义文本文件读取就行。下面是具体的修改方案和细节说明:

修改后的完整代码

#include <stdio.h>
#include <stdlib.h> // 用于处理文件打开失败的退出逻辑

struct movie { 
    char name[30]; 
    char genre[4][10]; 
} m[30];

int main() { // 推荐用int main()而非void main(),更符合C语言标准规范
    int i, j;
    FILE *fp; // 定义文件指针,用于关联目标文本文件

    // 以只读模式打开名为movies.txt的文件
    fp = fopen("movies.txt", "r");
    if (fp == NULL) { // 必须检查文件是否成功打开,避免后续操作出错
        printf("无法打开目标文件,请检查文件路径和权限!\n");
        exit(1); // 文件打开失败时,直接退出程序
    }

    // 从文件循环读取30条电影数据
    for(i = 0; i < 30; ++i) {
        // 用fscanf替代scanf,实现从文件读取内容
        fscanf(fp, "%s", m[i].name);
        for(j = 0; j < 4; ++j) {
            fscanf(fp, "%s", m[i].genre[j]);
        }
    }

    fclose(fp); // 读取完成后务必关闭文件,释放系统资源
    return 0;
}

文本文件的格式要求

你需要准备一个名为movies.txt的文本文件,放在程序编译后的可执行文件同目录下,内容格式要和程序读取逻辑匹配:每一组电影数据的元素用空格分隔,顺序为电影名 + 4个流派,示例如下:

Inception Action Sci-Fi Thriller Adventure
TheGodfather Crime Drama Mystery Thriller
Parasite Comedy Drama Thriller Horror

(注:fscanf会自动跳过空格、换行等空白符,所以数据可以换行写,也可以连续用空格分隔,不影响读取)

额外注意事项

  • 如果你的电影名称包含空格(比如The Shawshank Redemption),原来的%s格式符就不适用了——因为%s会在遇到空格时停止读取。这种情况下,你可以改用fgets读取整行内容,再手动分割出电影名和流派。
  • 确保文本文件里至少有30组完整的数据,否则程序可能会读取到无效内容或者提前终止循环。
  • 如果文件不在程序同目录,你可以在fopen里写完整路径,比如Windows系统写"C:\\myfiles\\movies.txt"(注意反斜杠要转义),Linux系统写"/home/user/movies.txt"。

内容的提问来源于stack exchange,提问作者Vivek Biswas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:03