C程序错误“;赋值的左操作数;

C程序错误“;赋值的左操作数;,c,C,有人能解释一下为什么这行代码是错误的吗 int n = 0, y = 1; y == 1 ? n = 0 : n = 1; 对于“n=1”语句,错误是“赋值的左操作数需要左值” (y == 1 ? n = 0 : n) = 1; 解释为因为n与?:运算符绑定,因为其优先级较高。 =需要l值作为其左操作数,而?:返回r值。 试试这个 y == 1 ? n = 0 : (n = 1); 或 可以使用三元运算符进行赋值,例如: int n = 0, y = 1; n = y == 1

有人能解释一下为什么这行代码是错误的吗

int n = 0, y = 1;
y == 1 ? n = 0 : n = 1;
对于
“n=1”

语句,错误是
“赋值的左操作数需要左值”

(y == 1 ? n = 0 : n) = 1;  
解释为因为
n
?:
运算符绑定,因为其优先级较高。
=
需要l值作为其左操作数,而
?:
返回r值。
试试这个

y == 1 ? n = 0 : (n = 1);   


可以使用三元运算符进行赋值,例如:

int n = 0, y = 1;
n = y == 1 ? 0 : 1;
你应使用:

n = y==1 ? 0 :1

根据C标准,如果试图使用条件运算符的结果作为左值,则行为是未定义的。

谢谢您的回答。我理解。但这是乞丐还是中间人的问题?关于编译器的知识似乎离乞丐很远,编译器在这件事上别无选择。语言上说这就是文本的解读方式…@webrocker;当我开始学习C时,我也面临着这个问题:P@KerrekSB; 编辑:)
n = y==1 ? 0 :1