如何为基于结构体数组的电影信息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
相关产品推荐
相关产品推荐

