C 比较值:赋值的左操作数需要左值
为什么我不能比较随机函数的结果C 比较值:赋值的左操作数需要左值,c,random,lvalue,C,Random,Lvalue,为什么我不能比较随机函数的结果 #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 + ran
#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");
}
}
#包括
#包括
#包括
int main(){
srand(时间(空));
/*玩家1*/
整数P1d1、P1d2、P1total;
P1d1=1+rand()%6;//掷玩家1的第一个骰子;随机#在1-6之间
P1d2=1+rand()%6;//掷玩家1的第二个骰子;随机#在1-6之间
P1total=P1d1+P1d2;//取两卷的总和
/*玩家2*/
int P2d1、P2d2、P2total;
P2d1=1+rand()%6;//掷玩家2的第一个骰子;随机#在1-6之间
P2d2=1+rand()%6;//掷玩家2的第二个骰子;随机#在1-6之间
P2total=P2d1+P2d2;//取两卷的总和
如果(P1d1==P1d2&&P2d1=!P2d2){=
是赋值运算符。
=
是一个比较运算符。您可能需要使用=
(相等)而不是=
(赋值)。我看到您在问题中更改了这一点
错误消息的原因是:
P2d1 =! P2d2
不等式运算符是!=
,而不是=!
按照您编写它的方式,它是一个赋值=
,后跟一元“not”!
。由于=
的优先级很低,因此:
(P1d1 == P1d2 && P2d1 =! P2d2)
相当于:
((P1d1 == P1d2 && P2d1) = !P2d2)
当然,(P1d1==P1d2&&P2d1)
不是作业的有效目标
这是C语言编程中更有趣的事情之一。在某些语言中,轻微的打字可能会导致语法错误,编译器的错误消息可能会准确地告诉您问题所在。在C语言中,轻微的打字可能很容易导致语法仍然正确的代码,但这有一些缺陷rd的意思——或者,在您的例子中,它生成的错误消息不是很有启发性
如果您不理解编译器错误消息的含义,一个好方法是忽略它所说的内容,只需仔细查看编译器抱怨的最早的代码行。使用!=
if (P1d1 == P1d2 && P2d1 =! P2d2){
printf("Player 1 wins!\n");
}
与
if ((P1d1 == P1d2 && P2d1) = (!(P2d2))){
printf("Player 1 wins!\n");
}
因为它应该是=
,而不是=
。它仍然会给出与==它的!=不=!相同的错误消息,而且这很长,我将投票关闭,因为这与Rand()无关但我不知道正确的结束原因。@JonathonReinhart:这不应该结束,因为提问者显然已经做了自己的研究,并且陷入了困境。我会投票修改问题名称以解决问题“比较值时出现问题:赋值的左操作数需要左值”