左值需要作为 c 中赋值错误的左操作数
lvalue required as left operand of assignment error in c
我必须编写一个程序来比较 3 个整数。我不明白为什么我不能将变量 a 分配给最小或最大变量。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, max, notmax;
printf("enter first integer\n");
scanf("%d", &a);
printf("enter second integer\n");
scanf("%d", &b);
printf("enter third integer\n");
scanf("%d", &c);
a > b ? a = max : a = notmax ;
return 0;
}
查看优先级和结合律可能有助于您了解此处发生的情况。该赋值的优先级低于 ?: 运算符。
所以声明
a > b ? a = max : a = notmax ;
被视为:
((a > b ? a = max : a) = notmax );
但是一旦你在适当的地方使用括号,如下所示,一切正常:
a > b ? a = max : (a = notmax) ;
或者甚至是:
(a > b ? (a = max) : (a = notmax)) ;
这应该按照你想要的方式强制优先。使用括号将有助于评估复合语句。
接受的答案解释说,您看到的错误是由于 ?:
和 =
之间的运算符优先级造成的。它没有提到什么是最好的解决办法。
?:
运算符的计算结果为第二部分的值或第三部分的值。所以它可以用来选择 max
或 notmax
并将其分配给 a
.
a = a > b ? max : notmax;
但是,你的代码仍然有问题,因为max
和notmax
还没有初始化,所以它们的值是不确定的 阅读它们会导致 undefined behavior。在运行这个状态之前,你需要确保这两个变量都被赋值了。
我必须编写一个程序来比较 3 个整数。我不明白为什么我不能将变量 a 分配给最小或最大变量。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, max, notmax;
printf("enter first integer\n");
scanf("%d", &a);
printf("enter second integer\n");
scanf("%d", &b);
printf("enter third integer\n");
scanf("%d", &c);
a > b ? a = max : a = notmax ;
return 0;
}
查看优先级和结合律可能有助于您了解此处发生的情况。该赋值的优先级低于 ?: 运算符。 所以声明
a > b ? a = max : a = notmax ;
被视为:
((a > b ? a = max : a) = notmax );
但是一旦你在适当的地方使用括号,如下所示,一切正常:
a > b ? a = max : (a = notmax) ;
或者甚至是:
(a > b ? (a = max) : (a = notmax)) ;
这应该按照你想要的方式强制优先。使用括号将有助于评估复合语句。
接受的答案解释说,您看到的错误是由于 ?:
和 =
之间的运算符优先级造成的。它没有提到什么是最好的解决办法。
?:
运算符的计算结果为第二部分的值或第三部分的值。所以它可以用来选择 max
或 notmax
并将其分配给 a
.
a = a > b ? max : notmax;
但是,你的代码仍然有问题,因为max
和notmax
还没有初始化,所以它们的值是不确定的 阅读它们会导致 undefined behavior。在运行这个状态之前,你需要确保这两个变量都被赋值了。