比较值:左值作为赋值的左操作数所需的左值

sup*_*dso -5 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 + 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).有什么建议?

Kei*_*son 9

您可能需要使用==(相等)而不是=(赋值).我看到你在问题中改变了这一点.

错误消息的原因是:

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中,次要拼写错误很容易导致代码仍然在语法上正确,但这有一些荒谬的含义 - 或者,在您的情况下,会产生一个不太有启发性的错误消息.

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