-5

为什么我不能比较随机函数的结果?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main (){

srand(time(NULL));

/*Player 1*/
int P1d1, P1d2, P1total;
P1d1 = 1 + rand() % 6;  //Rolls Player 1's first die; random # between 1-6
P1d2 = 1 + rand() % 6;  //Rolls Player 1's second die; random # between 1-6
P1total = P1d1 + P1d2;  //Takes total of both rolls

/*Player 2*/
int P2d1, P2d2, P2total;
P2d1 = 1 + rand() % 6; //Rolls Player 2's first die; random # between 1-6
P2d2 = 1 + rand() % 6; //Rolls Player 2's second die; random # between 1-6
P2total = P2d1 + P2d2; //Takes total of both rolls

if (P1d1 == P1d2 && P2d1 =! P2d2){ <--- ERROR HERE
    printf("Player 1 wins!\n");
    }
else if (P2d1 == P2d2 && P1d1 =! P1d2) {
    printf("Player 2 wins!\n");
    }
}

我收到错误消息error: lvalue required as left operand of assignment

我知道这意味着赋值的左侧必须是一个变量,但左侧一个变量(int P1d1)。有什么建议么?

4

3 回答 3

9

您可能需要使用==(平等)而不是=(分配)。我看到你在你的问题中改变了这一点。

错误信息的原因是:

P2d1 =! P2d2

不等式运算符是!=,不是=!

你写它的方式,它是一个赋值,=后跟一个一元 "not" !。由于=优先级非常低,因此:

(P1d1 == P1d2 && P2d1 =! P2d2)

相当于:

((P1d1 == P1d2 && P2d1) = !P2d2)

当然(P1d1 == P1d2 && P2d1),这不是分配的有效目标。

这是 C 编程中最有趣 事情之一。在某些语言中,一个小的拼写错误可能会引入语法错误,而编译器的错误消息很可能会准确地告诉您问题出在哪里。在 C 语言中,轻微的拼写错误很容易导致代码在语法上仍然正确,但具有一些荒谬的含义——或者,在您的情况下,这会产生一条不太有启发性的错误消息。

如果您不了解编译器错误消息的含义,一个好的方法是忽略它所说的内容,并仔细查看编译器抱怨的最早的代码行。

于 2013-09-27T22:24:58.000 回答
0

=是赋值运算符。 ==是比较运算符。

于 2013-09-27T22:22:34.363 回答
0

使用!=.

if (P1d1 == P1d2 && P2d1 =! P2d2){
printf("Player 1 wins!\n");
}

是相同的

if ((P1d1 == P1d2 && P2d1) = (!(P2d2))){
printf("Player 1 wins!\n");
}
于 2015-09-06T12:56:55.350 回答