2

我尝试了不同的方式来布置我的 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;
}
4

4 回答 4

12

你需要双==符号而不是=

==可以读作“等于”

于 2012-09-18T01:43:44.330 回答
6

你必须使用==而不是=。相等的运算符==测试,运算符=是赋值运算符

通过使用=,您正在分配而不是测试相等性。因此,当分配成功时,条件总是评估为真,除非分配的值是(或实际上是)0。(感谢 pickypg)

于 2012-09-18T01:44:35.597 回答
1

如前所述,您需要==.

但是,这里有一些做法可以提供帮助。

首先,始终将常量和函数返回值放在首位。 if('R' = playerOne...)将无法编译并准确告诉您在哪里可以找到它。

其次,考虑tolower()对输入进行处理(并将常量小写)以允许'R''r'不必同时测试两者。

第三,您可以删除几个 if 语句if(playerOne == playerTwo)。不幸的是,这需要首先对输入进行有效性检查,以避免两个玩家输入相同的无效字符。但是,您可能希望在输入错误的情况下进行此检查,例如输入“ERRR”的第一个字符会使(使用您的代码)“ER”无效,然后运行“RR”。

第四,您可以使用硬编码数组std::map等来对数据进行编码,并在没有所有 if 语句的情况下使用它。

于 2012-09-18T01:54:29.867 回答
0

正如其他人指出的那样,您会想要使用==.

==是检查相等性,=赋值运算符在哪里int num = 1;

在您的情况下,==是您需要的操作员。

于 2012-09-18T17:18:56.927 回答