*****代码更新新问题 *****
我在下面的列表中构建我想要输出的第一个表时遇到了问题。
[这是输出如何显示的照片] [1](注意第1张表)
[这是我的下面代码输出的屏幕截图] [2]
我无法通过销售的每件商品的数量来获得第一张桌子。
我的目标:
我正在尝试创建一个C程序来计算从2个输入文件中收集数据并输出这3个内容的公司的总销售额:
1)已售出商品的数量以每件商品的数量的降序排列 列在以“商品编号”分类的表格中“,”项目描述“和”已售出数量“。
2)以降序排列的总销售额 列出的每件商品的总销售额(总销售额=销售数量*单价)表格分类为“项目编号”,“项目描述”,“销售数量”,“单价”和“总销售额”。
3)总销售额(上述#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
警告的原因。