2015-06-28 34 views
1

我是一個初學者,我創建了一個老虎機模擬器。車輪旋轉,x,y和z被設置爲隨機數。我有一個if語句來檢查x == y == z。當程序運行時,數字實際上是相等的,它運行我的代碼,說它們不相等。爲什麼會發生?(C++)隨機數是相等的,但程序說他們不是

例如,cout語句會說2 - 2 - 2,那麼它會在if語句不相等的時候進入我的if語句,並且我會得到「you lose」代碼。

我應該補充說,這不會每次都發生。有時候它們在平等的時候正確執行if語句。這很奇怪。

srand(time(0)); 

    int x = (rand() % 2) + 1; 
    int y = (rand() % 2) + 1; 
    int z = (rand() % 2) + 1; 

    std::cout << "The spin results are... " << x << " -- " << y << " -- " << z << std::endl << std::endl; 

    if(x == y == z) 
    { 
    std::cout << "You win!\n\n"; 
    playerCoins = playerCoins + (coinsBet * 2); 
    } 
    else 
    { 
     std::cout << "You lose!\n\n"; 
    } 
+1

我建議使用標頭的設施代替rand,因爲它已被棄用。 –

回答

4

x == y可能導致0或1,具體取決於它們的真值或假值。然後將0或1與z進行比較,這就是爲什麼給定的結果是錯誤的。

正確的方法是檢查x是否等於z,y是否等於z,這當然也意味着x等於y。 (x == z) && (y == z)

4

x == y == z不會做你認爲它做的事。改爲使用x == y && y == z

+0

我喜歡。但它看起來不錯:D –

+1

你應該解釋一下這兩者的含義。 – Dukeling

+0

將x和y進行比較,然後將比較結果(布爾值)與z進行比較,對嗎? – Toumash

2

將表達式if (x == y == z)評估爲false

假裝xy,並且z都持值2

因爲(x == y)是那麼真/ 1,而z持有價值2,if語句將檢查:

if ((x == y) == z) 
//  1 == 2 

變成:

if (1 == 2) {} // false 

您可以修復,通過這樣做:

if ((x == y) && (y == z)) { /* ... */ } 
0

您應該使用邏輯運算符。

該表達式,x == y == z是錯誤的。
它應該這樣做。

if((x == y) && (y == z)) { //or... if ((x == y) == z) 
//your code goes here... 
} 

約邏輯運算符,Here更多信息。

相關問題