为什么我不能比较随机函数的结果?
#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");
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误消息error: lvalue required as left operand of assignment
.
我知道这意味着赋值的左侧必须是变量,但左侧是变量(int P1d1).有什么建议?
您可能需要使用==
(相等)而不是=
(赋值).我看到你在问题中改变了这一点.
错误消息的原因是:
P2d1 =! P2d2
Run Code Online (Sandbox Code Playgroud)
不平等运算符!=
不是=!
.
你写它的方式,它是一个分配=
后跟一元"不" !
.由于=
优先级非常低,因此:
(P1d1 == P1d2 && P2d1 =! P2d2)
Run Code Online (Sandbox Code Playgroud)
相当于:
((P1d1 == P1d2 && P2d1) = !P2d2)
Run Code Online (Sandbox Code Playgroud)
当然,(P1d1 == P1d2 && P2d1)
这不是作业的有效目标.
这是比较一个啊哈 有趣的事情有关C.程序在某些语言中,一个小错字很可能会推出一个语法错误,而编译器的错误信息很可能会告诉你到底是什么问题.在C中,次要拼写错误很容易导致代码仍然在语法上正确,但这有一些荒谬的含义 - 或者,在您的情况下,会产生一个不太有启发性的错误消息.
如果您不理解编译器错误消息的含义,那么一种好方法是忽略它所说的内容,并仔细查看编译器抱怨的最早代码行.