如何让C程序执行时读取文本文件?GCC环境下的实现疑问
解决自动售货机库存程序读取文件的问题
你执行程序后加文件路径没效果,核心原因是你的程序没处理命令行参数——系统不会自动把你输入的路径传给程序,得自己写代码接收。下面是两种可行的解决方案:
方案一:用命令行参数传递文件路径(推荐)
这是程序读取外部文件的标准做法,也是作业场景下最合理的实现方式。C程序的main函数可以通过参数接收命令行输入,具体实现如下:
#include <stdio.h> #include <stdlib.h> // 定义商品结构体,可根据作业要求调整字段 typedef struct { int item_id; char name[50]; float price; int stock_count; } VendingItem; int main(int argc, char *argv[]) { // 检查是否传入了正确数量的参数 if (argc != 2) { printf("使用方式: %s <库存文件路径>\n", argv[0]); return 1; } // 打开目标文件 FILE *inventory_file = fopen(argv[1], "r"); if (inventory_file == NULL) { perror("打开文件失败"); return 1; } VendingItem inventory[12]; int i; // 读取12行数据填充结构体数组 for (i = 0; i < 12; i++) { // 假设每行格式为:ID 商品名 单价 库存数,可根据实际文件格式修改格式符 if (fscanf(inventory_file, "%d %s %f %d", &inventory[i].item_id, inventory[i].name, &inventory[i].price, &inventory[i].stock_count) != 4) { printf("第%d行数据格式错误\n", i+1); fclose(inventory_file); return 1; } } // 示例:打印读取到的库存信息 printf("已加载库存数据:\n"); for (i = 0; i < 12; i++) { printf("ID:%d | 商品:%s | 单价:%.2f | 库存:%d\n", inventory[i].item_id, inventory[i].name, inventory[i].price, inventory[i].stock_count); } fclose(inventory_file); return 0; }
编译与运行命令:
gcc -o vending_manager vending_manager.c ./vending_manager ./stock.txt # 替换为你的实际文件路径
方案二:其他替代方法
如果暂时不想用命令行参数,也可以用以下两种方式,但灵活性不如前者:
- 硬编码文件路径:直接在代码里写死文件路径,比如
FILE *fp = fopen("/home/yourname/stock.txt", "r");,但更换文件时必须修改代码重新编译,非常不便。 - 运行时手动输入路径:程序启动后提示用户输入文件路径,用
scanf或fgets读取:char file_path[100]; printf("请输入库存文件路径:"); scanf("%s", file_path); FILE *fp = fopen(file_path, "r");
注意:无论用哪种方法,都要处理文件打开失败的情况(比如路径错误、文件不存在),perror函数可以帮你快速定位问题原因。
内容的提问来源于stack exchange,提问作者Anthu.ny
相关产品推荐
相关产品推荐

