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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:25:20