我尝试了不同的方法来布置我的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 :(得分:12)
您需要使用双==
符号代替=
==
可以理解为“等于”
答案 1 :(得分:6)
您必须使用==
而不是=
。运算符==
测试相等性和运算符=
是赋值运算符
使用=
您正在分配而不是测试是否相等。因此,当赋值成功时,条件总是求值为真,除非所分配的值是(或实际上是)0。(感谢pickypg)
答案 2 :(得分:1)
如上所述,您需要==
。
但是,有一些做法可以帮到这里。
首先,始终先将常量和函数返回值。 if('R' = playerOne...)
将无法编译并告诉您确切的位置。
其次,考虑对输入执行tolower()
(并对常量进行下限)以允许'R'
和'r'
而不必同时测试它们。
第三,您可以使用if(playerOne == playerTwo)
删除多个if语句。不幸的是,这需要首先对输入进行有效性检查,以避免两个玩家输入相同的无效字符。但是,如果键入错误,您可能希望进行此检查,例如键入“ERRR”的第一个字符会使(使用您的代码)使“ER”无效,然后运行“RR”。
第四,您可以使用硬编码数组或std::map
等来编码数据,并在没有所有if语句的情况下使用它。
答案 3 :(得分:0)
正如其他人所指出的那样,您可能希望使用==
。
==
用于检查是否相等,=
是int num = 1;
在您的情况下,==
是您需要的运营商。