我的if语句究竟出了什么问题?

时间:2012-09-18 01:41:57

标签: c++

我尝试了不同的方法来布置我的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 个答案:

答案 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;

之类的赋值运算符

在您的情况下,==是您需要的运营商。