我的C程序中的结构和数组有问题

时间:2016-05-14 04:09:53

标签: c arrays sorting struct io

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

我在下面的列表中构建我想要输出的第一个表时遇到了问题。

[这是输出如何显示的照片] [1](注意第1张表)

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

我无法通过销售的每件商品的数量来获得第一张桌子。

我的目标:

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

1)已售出商品的数量每件商品的数量的降序排列 列在以“商品编号”分类的表格中“,”项目描述“和”已售出数量“。

2)降序排列的总销售额 列出的每件商品的总销售额(总销售额=销售数量*单价)表格分类为“项目编号”,“项目描述”,“销售数量”,“单价”和“总销售额”。

3)总销售额(上述#2中每个总额的总和)

2 个答案:

答案 0 :(得分:2)

让我们采取原型声明

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将其视为已分配的数组。你没有为这个指针分配内存。

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

struct Item items[200];

除非文件中有超过200个项目就足够了,否则甚至可能会使数组变小。

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

答案 1 :(得分:0)

在原型中,您没有声明一个需要an array of struct Item的函数。 struct items[]并不代表任何明智的结果(没有类似struct items的结构。您必须使用struct Item items[],例如type identifier[]。另一个例子可能是struct Item array_name[]。 对于strcmp的问题,您需要添加string.h。这就是它发出implicit declaration警告的原因。