2014-03-26 52 views
1

我有一個程序必須在10個部分之間進行選擇。一旦用戶選擇了一個bin,程序會詢問您是要添加還是刪除parts.my問題是當我嘗試添加或從單個bin中刪除時,它會添加並從所有bin刪除。如何刪除結構數組的元素?

struct Inventory 
{ 
    char description[35]; 
    int num; 
}; 

Inventory parts[Number_Bins] = { 
    {"Valve", 10}, 
    {"Bearing", 5}, 
    {"Bushing", 15}, 
    {"Coupling", 21}, 
    {"Flange", 7}, 
    {"Gear", 5}, 
    {"Gear Housing", 5}, 
    {"Vacuum Gripper", 25}, 
    {"Cable", 18}, 
    {"Rod", 12} 
}; 

這是我的功能刪除零件。我有另一個添加部件,它是相似的。我可以爲數組的每個元素創建10個這樣的元素,但這不是重點。

void RemoveParts(Inventory bins[]) 
{ 
    int e = 10; 
    int enter2; 
    cout << "Enter how many you want to remove\n"; 
    cin >> enter2; 
    if (enter2 < 0) 
    { 
     cout << "Negative Values are not legal. Try again\n"; 
    } 
    else 
    { 
     for (int index = 0; index < e; index++) 
     { 
      bins[index].num = bins[index].num - enter2; 
     } 
    } 
} 

我使用開關菜單來拿起任何垃圾箱。所以有10個案例。有什麼辦法可以讓它更簡單,並且編寫更少的代碼?

回答

2

那是因爲你是通過在這裏的所有垃圾箱循環:

for (int index=0; index<e; index++){  
    bins[index].num = bins[index].num - enter2; 
} 

如果你想從你必須告訴你的方案,其中一個一定槽中取出。

從我個人理解,你想刪除整個倉...

要做到這一點,你必須從數組中刪除的元素。

我建議使用std::vector<Inventory> parts(Number_Bins)std::array<Inventory, 10> parts;甚至std::list<Inventory> parts(Number_Bins)。然後設置。

然後刪除元素將只是通過刪除

要從array刪除具體你必須將整個陣列轉移。

//where enter2 is the element we want to erase 
for (int index=enter2-1; index<total_size; index++){  
    bins[index] = bins[index + 1]; 
} 
// then reinit content of last element 
bins[total_size-1] = 0; 

我不建議這條路的話,那讓一切更難,那感覺就像是輕描淡寫。這就是爲什麼:

  • 現在,你必須檢查Inventory項設置爲0,設置成功後兩個變量爲0
  • 現在你必須跟蹤Initialized元素數量的數組
  • 您在還需要跟蹤陣列

這絕不是C++,沒有密封,無OOP,這可能會迫使你介紹global變量,因爲你必須保持跟蹤塞入的大小F。

編寫不可擴展和不可維護的代碼對您的現在是不利的,但最重要的是,對您的未來不利。

+0

如果我不使用向量或std :: list 部分(Number_Bins)會怎麼樣。有沒有其他方法?我的菜單是10箱。我可以在一種情況下做什麼?我很抱歉,我有一種新的結構,我只想知道更多的方法來做到這一點。 – user3019164

+1

@ user3019164,不,你不這樣做,我告訴過你三種不同的結構來做這個不同的事情,你想堅持自己的行事方式。檢查編輯 – Claudiordgz

+0

我不知道如何使用矢量或其他選項。我想我必須閱讀它。 – user3019164