2012-09-18 46 views
2

我已經嘗試過佈置if語句的不同方式,我甚至嘗試過嵌套if語句。我得到相同的結果。除了顯示我的代碼之外,我不確定是否有任何方法來問我的問題。我的if語句到底是什麼錯誤?

#include <iostream> 
#include <conio.h> 
#include <string> 

using namespace std; 

int main() 
{ 
char playerOne, playerTwo; 

cout<<"ROCK PAPER SCISSORS!"<<endl; 
cout<<"Enter P for Paper"<<endl; 
cout<<"Enter R for Rock"<<endl; 
cout<<"Enter S for Scissors"<<endl; 

cout<<"Player One enter your choice: "; 
cin>>playerOne; 

cout<<"Player Two enter your choice: "; 
cin>>playerTwo; 

if ((playerOne = 'R') && (playerTwo = 'R')) 
    cout<<"Both players played same hand"; 
else if ((playerOne = 'R') && (playerTwo = 'P')) 
    cout<<"Player Two wins!"; 
else if ((playerOne = 'R') && (playerTwo = 'S')) 
    cout<<"Player One wins!"; 
else if ((playerOne = 'P') && (playerTwo = 'R')) 
    cout<<"Player One wins!"; 
else if ((playerOne = 'P') && (playerTwo = 'P')) 
    cout<<"Both players played same hand"; 
else if ((playerOne = 'P') && (playerTwo = 'S')) 
    cout<<"Player Two wins!"; 
else if ((playerOne = 'S') && (playerTwo = 'R')) 
    cout<<"Player Two wins!"; 
else if ((playerOne = 'S') && (playerTwo = 'P')) 
    cout<<"Player One wins!"; 
else if ((playerOne = 'S') && (playerTwo = 'S')) 
    cout<<"Both players played same hand"; 
else 
    cout<<"Invalid inputs!"; 

getche(); 
return 0; 
} 
+0

您可能會先告訴他們有什麼問題,以便我們幫助您瞭解如何解決問題。 – Tim

+0

編譯器應該用這段代碼產生了一些警告,你是否注意到了它們? –

回答

12

您需要的雙==標誌,而不是=

==可以讀作 「等於」

6

必須使用==,而不是=。運營商==測試等於和運算符=是賦值運算符

通過使用=您正在分配而不測試相等性。因此,條件總是評估爲真,因爲分配是成功的,除非所分配的值是(或實際上是)0.(感謝pickypg)

+2

你應該澄清一些事情:'variable =「blah」;'根據左手設置的內容(我至少在php和javascript中)返回true,而不僅僅是因爲它會成功 – jeremy

+1

這是不正確的。如果值(或實際上)爲「0」,它將評估爲「假」。 – pickypg

+0

如果C和C++'variable =「blah」'用作表達式(並且這是一個非空'char *',所以在'if'中它將始終爲真),則評估爲'「blah」。一般來說,作爲表達式使用時,賦值爲右邊。並且一個值總是爲真,除非它是'0','NULL'或'false'。 –

1

如上所述,您需要==

但是,有一些做法可以幫助您。

首先,總是先放置常量和函數返回值。 if('R' = playerOne...)將無法​​編譯,並告訴你在哪裏可以找到它。其次,考慮在輸入(和較低的方框常量)上輸入tolower()以允許'R''r',而不必同時測試兩者。

第三,你可以刪除幾個if語句與if(playerOne == playerTwo)。不幸的是,這需要首先對輸入進行有效性檢查,以避免兩個玩家輸入相同的無效字符。但是,如果輸入錯誤,例如第一個輸入'ERRR'的字符(使用您的代碼)使'ER'失效並運行'RR',您可能希望進行此檢查。第四,你可能使用硬編碼數組或std::map等來編碼數據並在沒有所有if語句的情況下使用它。

0

正如其他人指出的,你會想要使用==

==是檢查平等,其中=是賦值運算符像int num = 1;

而在你的情況下,==是你所需要的操作。