2012-08-07 65 views
-1

這裏是我的主:搬運車中的食物,但某些食物沒有清除?爲什麼

int main() { 
    Inventory Master; 
    bool flag; 
    Customer Bob("Bob", "CreditCard.txt"); 
    Customer Joe("Joe", "CreditCard.txt"); 



    Master.firststock("inventory.txt"); 
    vector<Food> temp = Master._Inv; 
    cout <<"Hi, What would you like to buy today?" << endl; 
    for(unsigned int i=0; i<temp.size(); i++) { 
    cout << temp[i].name << " " << temp[i].quant << " " << temp[i].price << endl; 
    } 

    cout <<"\n"; 
    Food Apple("Apples", .99, 10); 
    Food Orange("Oranges", .99, 10); 
    Food Chip("Chips", 3.00, 10); 

    cout <<"\nHi Bob" << endl; 
    flag = Bob.addCart(Apple, 7, &Master); 
    cout <<"Bob's total purchases are Currently: \n"; 
    Bob.report(); 
    flag = Bob.addCart(Orange, 2, &Master); 
    flag = Bob.addCart(Chip, 2, &Master); 
    Bob.report(); 
    flag = Bob.removeCart(); 
    Bob.report(); 
    cout <<"Bob, "; 
    flag = Bob.checkout(&Master); 

這裏下面我實現了從我的矢量_cart去除食物:

bool Customer::removeCart() { 
    bool flag; 
    int q = 0; 
    unsigned int i=0; 
    string remove; 

    cout << "\nWhat would you like to remove and how much would you like to remove?" << endl; 
    cin >> remove >> q; 
for (i =0; i < _Cart.size(); i++) { 
    if(remove == _Cart[i].name) { 
     if (q >= 0) { 
    _Cart[i].quant -= q; 
    //inv->_Inv[i].quant += q; 
    cout <<"\nYou removed " << q << " " << remove <<" In your cart\n" << endl; 
    return true; 
     } 
     if (q < 0) { 
      cout << "Invalid number of " << remove << " being removed.\n" << endl; 
      return true; 
     } 
    } 
    else {  
    try { 
    throw remove; 
} 

    catch (string param) { 
    cout << "\n" << remove << " doesn't exist in your cart\n" << endl; 
     } 

     return true; 
    } 
} 

我包含的功能removeCart頭:

class Customer { 
    public: 

    Customer(string n, string fileName); 
    ~Customer() { _Cart.clear(); }; 
    bool addCart(Food f, int q, Inventory* inv); 
    bool removeCart(); 
    void report(); 
    bool checkout(Inventory* inv); 
    protected: 
    string remove; 
    string name; 
    int q; 
    int card; 
    double balance; 
    CreditCard _CC(int card,double balance); 
    vector<Food> _Cart; 
}; 

現在由於某種原因,當我打電話給removeCart,輸入「蘋果」的作品,但我注意到我做了一個名爲蘋果的食物對象,所以不知道爲什麼打字「蘋果」適用於刪除而不是「蘋果」。此外,當我嘗試「橙色」或「芯片」的例外顯示,但正如你可以看到在主我添加芯片和橙色鮑勃的車。我甚至嘗試過「橙子」和「芯片」,它仍然讓我感到異常而不是工作。我可以欣賞幫助。

+1

你的源碼不是一個完整的程序,所以,你正在使用'std :: string'和'std :: vector',對嗎?我只是問,因爲我沒有看到'#include'使用'namespace',所以它可以是任何東西。 – 2012-08-07 05:54:37

+0

我的意思是我可以包括整個程序,如果你願意的話。我只是因爲某些原因提供了一切,但如果需要的話我可以。我可以嗎? – tensuka 2012-08-07 06:12:35

+0

您需要包含* less *代碼。只是一個小的,可編輯的樣本,再現你的問題。 – juanchopanza 2012-08-07 06:17:05

回答

0

您的for/if/else結構已損壞。如果您不匹配購物車中的第一個元素,則會拋出異常,並立即捕獲。試試更多類似的東西:

for (i =0; i < _Cart.size(); i++) 
{ 
    if(remove == _Cart[i].name) 
    { 
     if (q >= 0) 
     { 
      _Cart[i].quant -= q; 
      //inv->_Inv[i].quant += q; 
      cout <<"\nYou removed " << q << " " << remove <<" In your cart\n" << endl; 
     } 
     else 
      cout << "Invalid number of " << remove << " being removed.\n" << endl; 
     return true; 
    } 
} 
cout << "\n" << remove << " doesn't exist in your cart\n" << endl; 
return true; 
+0

我該如何解決這個問題呢?我的意思是我仍然是新的異常處理。 – tensuka 2012-08-07 06:13:20

+0

查看我的更新。您需要完成'for'循環才能完成搜索要刪除的項目。如果它與第一個項目不匹配,則不是錯誤。 – 2012-08-07 06:15:53

+0

好的,這是真的有效。我在那裏錯過了一些。一個問題,但。比方說,我拋出了一個例外,因爲用戶輸入了一個不在車裏的食物,我怎麼能要求他們再次輸入食物,直到它最終存在於車裏的東西?如果可以的話,一個提示可以做或者一些例子。如果我不明白 – tensuka 2012-08-07 06:28:33

0

這是作業嗎? :)

首先,「Apple」是您創建的變量的名稱,但您將「Apples」傳遞給Food的構造函數,所以我想這個值被分配給它的「name」成員,它是用於比較。其次,正如David所注意到的那樣,只有當您嘗試刪除購物車中的第一個元素時,您的循環纔會起作用。在你的情況下,第一個元素被命名爲「蘋果」,所以鍵入「蘋果」的作品。

+0

沒有它實際上是一個項目,但它是整個學期課程中唯一的項目。但是,我終於明白,它只會刪除第一個元素。花了我一段時間,我很慢。 :d – tensuka 2012-08-07 06:31:47