2016-05-14 43 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警告。