2016-05-14 63 views
0

*****代码我在从我的名单大厦下面的第一个表的麻烦新问题 *****经与结构和数组的麻烦在我的C程序

已更新了什么我正在尝试输出。

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

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

我无法让第一张桌子按每个出售物品的数量下降。


我的目标:

我试图创建一个C程序来计算总销售额从2个输入文件收集数据公司和输出这些三两件事:

1) 销售项目数量列于的降序销售每件商品的数量显示在分类为标题“商品编号”,“商品说明”和“数量销售”的表格中。

2)列出的每个项目降序总销售额的订单的销售总数(总销售额=出售*单位价格)量显示在与标头“项目号码”归类一个表中,“项目说明” ,“已售数量”,“单价”和“总销售额”。

3)的总销售额值(各总的从上面#2)的总和

回答

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; 

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

最简单的办法就是让itemsmain功能的阵列:

struct Item items[200]; 

除非你有文件中的200余项这就够了,你甚至可以使数组小。

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

0

在你的原型中,你没有声明一个需要an array of struct Item的函数。 struct items[]并不意味着什么明智这里(有像struct items没有结构,必须使用struct Item items[],像type identifier[]。另一个例子是struct Item array_name[]。 对于问题strcmp,你需要包括string.h。这就是为什么它给人的implicit declaration警告。