考虑下面的C代码。
#include <stdio.h>
int main(void)
{
int test = 0;
int a= 10,b = 20;
test ? a*2 : b*3;
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
return 0;
}
当试图编译时,它抛出以下错误。
file1.c:11:50: error: lvalue required as left operand of assignment
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
^
file1.c:11:74: error: lvalue required as left operand of assignment
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
^
我已经为赋值操作提供了一个l值作为左操作数,而且为什么它不在行中抛出错误
test ? a*2 : b*3;
它只在生产线上产生错误
printf("a = %d, b = %d\n",(test ? a = 200 : b = 300),(test ? a =2 : b = 3));
请解释一下。
最佳答案
您可能缺少括号,编译器认为您的意思是:(test ? a = 200 : b) = 300
当你真正的意思是:test ? (a = 200) : (b = 300)
关于c - 即使给定的l值在三元运算符中很好,赋值语句中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50960792/