【问题标题】:Having trouble with structures and arrays in my C program在我的 C 程序中遇到结构和数组问题
【发布时间】:2016-05-14 04:09:53
【问题描述】:

***** 代码更新为 新问题 *****

我无法从下面的列表中构建我要输出的第一个表。

[这是一张输出应该看起来如何的照片][1](注意第一个表)

[这是我下面的代码输出的截图][2]

我无法让第一张桌子按每件商品的销售数量递减。


我的目标:

我正在尝试创建一个 C 程序来计算一家公司的总销售额,该程序从 2 个输入文件中收集数据并输出以下 3 件事:

1) 已售出的商品数量每件已售出的商品数量的降序排列显示在以标题“商品编号”分类的表格中”、“商品描述”和“销售数量”。

2)每件商品的总销售额总销售额的降序排列(总销售额 = 售出数量 * 单价)显示在用标题“商品编号”、“商品描述”、“销售数量”、“单价”和“总销售额”分类的表格。

3)总销售额(上述#2 中各项总和的总和)

【问题讨论】:

    标签: c arrays sorting struct io


    【解决方案1】:

    让我们来声明原型

    int readItemList(struct items[]);
    

    在这里,您声明了一个函数readItemList,它返回一个int,并将一个指向struct item 的指针作为参数。 几乎但不是你想要的。

    您想要的是让函数获取指向struct Item 的指针(注意大写I):

    int readItemList(struct Item *items);
    

    第二个错误是因为你没有包含<string.h>


    但是,这些只是编译器检测到的问题,您会遇到更严重的错误,这将导致未定义的行为,并且很可能在您运行程序时导致崩溃:您使用未初始化的本地变量。

    main 函数中你有

    //Creating dynamic array of structure
    struct Item *items;
    

    问题是您实际上并没有创建任何东西。您只需将未初始化的指针(这意味着它的值indeterminate)传递给readItemList 函数,然后readItemList 将其视为已分配的数组。你没有为这个指针分配内存。

    最简单的解决方案是在main 函数中将items 设为数组:

    struct Item items[200];
    

    除非文件中有超过 200 项就足够了,否则您甚至可以使数组更小。

    另一种解决方案是在将内存传递给readItemList 函数之前,在main 中为项目实际动态分配内存。或者让readItemList 函数分配它,但是您需要更改它以获取指向变量的指针,模拟按引用传递,并根据需要让readItemList 分配和重新分配。

    【讨论】:

      【解决方案2】:

      在您的原型中,您没有声明一个采用an array of struct Item 的函数。 struct items[] 在这里没有任何意义(没有像struct items 这样的结构。你必须使用struct Item items[],比如type identifier[]。另一个例子可能是struct Item array_name[]。 对于strcmp 的问题,您需要包含string.h。这就是它发出implicit declaration 警告的原因。

      【讨论】:

        猜你喜欢
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        • 1970-01-01
        • 2022-11-27
        • 2013-08-06
        • 2022-12-11
        相关资源
        最近更新 更多