Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 比较值:赋值的左操作数需要左值_C_Random_Lvalue - Fatal编程技术网

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:这不应该结束,因为提问者显然已经做了自己的研究,并且陷入了困境。我会投票修改问题名称以解决问题“比较值时出现问题:赋值的左操作数需要左值”