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

如何将直接初始化的PRODUCT结构体对象加入库存数组并在报表展示

问题解答

疑问回复

  • 能不能用PRODUCT hammer = {"Hammer", 1234, 5.50, 8.99, 4};这种方式创建库存商品?
    可以,这是C语言结构体的聚合初始化语法,是标准合法的结构体变量创建方式,适合初始化时所有字段值都明确的场景。
  • 这种方式比调用函数创建的效率更高吗?
    是的,聚合初始化是编译期完成字段赋值,不需要运行期逐行调用strcpy、逐行给字段赋值,没有额外的函数调用开销,运行效率更高,代码也更简洁。
  • 怎么把这个hammer对象纳入现有库存流程,打印到报表里?
    你只需要把已经初始化好的hammer变量完整复制到inventory数组的空闲位置,再给effectiveSize加1即可。C语言允许同类型的结构体直接用=赋值,内部的数组成员也会自动完成逐字节拷贝,不需要你手动调用strcpy复制name字段,不会出错。

可运行示例代码

我同时优化了原有fillInProducts函数的写法,用复合字面量替代逐行赋值,更简洁不易出错:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[40];
    short int number;
    double wholesale;
    double retail;
    short int onHand;
} PRODUCT;

void fillInProducts(PRODUCT[], int* pSize);
void inventoryReport(PRODUCT[], int*);

int main() {
    // 用聚合初始化创建hammer商品
    PRODUCT hammer = {"Hammer", 1234, 5.50, 8.99, 4};

    PRODUCT inventory[500];
    int effectiveSize = 0;

    // 将hammer加入库存数组
    inventory[effectiveSize] = hammer;
    effectiveSize++;

    fillInProducts(inventory, &effectiveSize);
    inventoryReport(inventory, &effectiveSize);

    return 0;
}

void fillInProducts(PRODUCT inventory[], int* pSize) {
    // 用复合字面量直接赋值,替代逐行赋值写法
    inventory[*pSize] = (PRODUCT){"手锯", 3456, 12.34, 23.99, 12};
    (*pSize)++;

    inventory[*pSize] = (PRODUCT){"测试商品2", 3457, 12.34, 23.99, 12};
    (*pSize)++;
}

void inventoryReport(PRODUCT inventory[], int *pSize){
    int i = 0;
    printf("  库存报表  \n");
    printf("  ========  \n\n");
    printf("   商品名    商品编号   库存数   批发价   零售价\n");
    printf("  =========  ========  =======  =======  =======\n");

    for (i = 0; i < *pSize; i++) {
        printf("%10s %10d %8d %10.2lf %10.2lf\n", 
               inventory[i].name, inventory[i].number, 
               inventory[i].onHand, inventory[i].wholesale, 
               inventory[i].retail);
    }
}

运行后即可看到Hammer出现在库存报表第一行,和其他商品一起正常展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:03