2016-08-25 131 views
0

今天我正在學習如何聲明結構記錄類型,結構化記錄類型在數組中的應用。所以基本上這是我如何開始使用結構編碼。結構錯誤表達式必須有bool類型

struct myStock 
    { 
     string title; 
     double price; 
     int stock_lvl; 
     bool award; 
    }; 

myStock stock[4]; //store 4 record 

void initialize() 
{ 

stock[1].title = "Ilo Ilo"; 
stock[1].price = 35.55; 
stock[1].stock_lvl = 15; 
stock[1].award = 1; 

stock[2].title = "Money Just Enough"; 
stock[2].price = 10.35; 
stock[2].stock_lvl = 0; 
stock[2].award = 0; 

stock[3].title = "My Mother-in-Law"; 
stock[3].price = 22.50; 
stock[3].stock_lvl = 5; 
stock[3].award = 0; 

stock[4].title = "Stars"; 
stock[4].price = 22.95; 
stock[4].stock_lvl = 1; 
stock[4].award = 1; 
} 

一切工作正常,但是當我來到這個部分,這部分是在陣列將循環並檢查值stock_lvl和基地的條件和執行。但是我收到的錯誤是「結構錯誤表達式必須有bool類型」。我在這裏做錯了什麼?我不是要求回答,但也許如果有人能向我解釋?

int replenishStock() 
{  
    for(int i=0; i<4; i++) 
    { 
    if(myStock[i].stock_lvl < 2) 
    { 
     myStock[i].award = true;    
     myStock[i].stock_lvl = +10; 
    } 
    else 
     myStock[i].stock_lvl = +5; 
    } 
+1

[FYI]'stock [4]'不好。這是未定義的行爲和一個滴答作響的定時炸彈。 – NathanOliver

+0

爲什麼初始化'award'的值爲'1'和'0',但在循環中使用'true'? –

+0

這個和'stock [0]'保存未初始化的數據。你真的需要讀一本書。這非常非常**非常基本。 – IInspectable

回答

2

對於初學者來說,N個元素數組的索引的有效範圍是[0,N-1]。因此,這些陳述

stock[4].title = "Stars"; 
stock[4].price = 22.95; 
stock[4].stock_lvl = 1; 
stock[4].award = 1; 

對於4個元素的數組無效。

對於錯誤信息,那麼它似乎不是結構名在這樣

​​

語句您必須使用數組名

if(stock[i].stock_lvl < 2) 
    ^^^^^^^ 
+0

哦,數組元素範圍從0,因爲N-1。數組似乎很複雜。 – user3804846

0

你正在做的兩件事情錯了在這裏:

  1. 你定義數組爲myStock stock[4];,這意味着你需要ŧ o請做stock[0]stock[3]而不是stock[1]stock[4]

  2. 此外,如果你定義你的結構具有bool award;,那麼你應該使用stock[x].award = true;stock[x].award = false;代替stock[x].award = 0;stock[x].award = 1; bool類型想要真的還是假的,雖然1或0,不應該給你的任何編譯器錯誤。

+0

#2不是問題。 0是錯誤的,其他一切都是真實的。 – NathanOliver

+0

我看到布爾如何工作。所有我認爲布爾是0或1,並應宣佈在1或0.現在我明白你的觀點。 – user3804846

相關問題