2012-11-18 73 views
0

新手在這裏,我的結構化數組參數被髮送到函數有一些困難。看來我的基本流血編譯器不喜歡我設置的功能。我已經對整個項目做了一些改進,但幾個小時一直在努力。我試着在這個網站上查看類似的程序,但沒有足夠類似的針對這些錯誤。我的庫存功能的工作是發送一條消息,說可口可樂= 0時飲料已售罄。任何幫助將不勝感激。我已經將int main後的函數定義從底部移到頂部以清除不同的編譯器錯誤。我接受這個程序任何部分的所有反饋,因爲它是一個類的任務,可以使用指針在我的下一個測試中取得成功。 謝謝結構,數組,函數

#include<iostream> 
#include<iomanip> 
using namespace std; 

struct Soda 
{ 
    string name; 
    float price; 
    int inv; 
}; 

void functInventory(Soda[],int);  //prototype 

void functInventory(Soda drink[],int num)  //function definition 
{ 
     if (drink[num].inv = 0) 
     cout << "SOLD OUT" <<endl; 
} 

int main() 
{ 
    const int option = 5; 
    string cola, rbeer, lemlime, grape, cream; 

    int InsAmount, choice; 
    int income = 0; 

    Soda array[option] = { 
          {cola, .75, 20}, 
          {rbeer, .75, 20}, 
          {lemlime,.75, 20}, 
          {grape, .80, 20}, 
          {cream, .80, 20} 
          }; 

    cout << "Please choose 1-6 " << endl; 
    cout << " 1. Cola = $.75 " << endl; 
    cout << " 2. Root Beer = $.75 " << endl; 
    cout << " 3. Lemon Lime = $.75 " << endl; 
    cout << " 4. Grape Soda = $.80 " << endl; 
    cout << " 5. Cream Soda = $.80 " << endl; 
    cout << " 6. QUIT & EXIT "  << endl; 

    switch(choice) 
    { 
     case 1: array[0].inv - 1 = array[0].inv; 
        income = income + .75; 
        functInventory(array, choice); 
        break; 

     case 2: array[1].inv - 1 = array[1].inv; 
        income = income + .75; 
        functInventory(array, choice); 
        break; 

     case 3: array[2].inv - 1 = array[2].inv; 
        income = income + .75; 
        functInventory(array, choice); 
        break; 

     case 4: array[3].inv - 1 = array[3].inv; 
        income = income + .80; 
        functInventory(array, choice); 
        break; 

     case 5: array[4].inv - 1 = array[4].inv; 
        functInventory(array, choice) 
        income = income + .80; 
        break; 

     case 6: cout << "The total amount earned is: $" << income <<endl; 
        break; 

     default: 
       cout << "Please enter a capital letter from 1-6 " << endl; 
    } 

    cout << "Please Tell Me How Much Money You Are Inserting: " <<endl; 
    cin >> InsAmount; 

    change = InsAmount - .75;  //I will work on creating a more accurate function 4 change 
    cout << "your change is " << change; << " "<< endl; 
    return 0; 

    } 
+0

「我基本的流血編譯器不喜歡我設置的功能」是什麼意思? –

+0

Bloodshed C++是使用的IDE。這是一個默認使用MinGW的Windows IDE。代碼中有一些語法錯誤。 – austin

+0

我的意思是它給了我錯誤。對不起 – delgadough

回答

1

你說過流血?我認爲這是基於gcc:打開警告,例如,-W -Wall和其他可能的!這會告訴你,這可能不是你想要做的:

if (drink[num].inv = 0) 

這是一個任務,而不是比較!你可能意味着

...或者,以防止意外=弄亂你的邏輯了

if (0 == drink[num].inv) 

...因爲這會導致編譯器錯誤,如果你想使用賦值。我沒有檢查過其他錯誤,但這似乎是一個明顯的錯誤。既然這是我最近的一個習慣,那麼我也要指出你shouldn't use std::endl

看起來有點代碼進一步下跌:這不應該,甚至編譯:

array[0].inv - 1 = array[0].inv; 

表達array[0].inv - 1的結果是一個臨時的內置型,我不認爲你可以分配給這種類型(當我嘗試編譯代碼時它肯定失敗;當我嘗試編譯它時,它很好地發出了關於我上面提到的問題的警告)。

+0

我修正了上面的問題,最後讓它編譯。謝謝!! – delgadough

0

你是從編譯器得到的誤差可能是這樣的:

test2.cpp:46:46: error: lvalue required as left operand of assignment

在你的switch語句中,你的賦值語句(在每種情況下的第一行)對的左邊的值等號而不是右側。這有點像說:

int my_age; 
26 = my_age; 

這是不會工作。變量是你的左值。

+0

減去另一邊的1。這是正確的! – delgadough