两种不同事物之间的比较语法

Reg*_*ser 2 c operators

以下程序给出错误

#include<stdio.h>
int main ()
{
int a=10,b;
a>=5?b=100:b=200;
printf("\n%d",b);
}
Run Code Online (Sandbox Code Playgroud)

错误是

ka1.c: In function ‘main’:
ka1.c:5: error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

现在,如果我更换线

a>=5?b=100:b=200;
Run Code Online (Sandbox Code Playgroud)

通过

a>=5?b=100:(b=200);
Run Code Online (Sandbox Code Playgroud)

然后编译然后没有错误.所以我想知道出了什么问题

a>=5?b=100:b=200;
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 10

三元运算符(?:)的优先级高于赋值运算符(=).所以你的原始陈述被解释为:

((a >= 5) ? (b = 100) : b) = 200;
Run Code Online (Sandbox Code Playgroud)

写它像这样:

b = (a >= 5) ? 100 : 200;
Run Code Online (Sandbox Code Playgroud)

这是惯用的C.(条件周围的括号不是必需的,但它们有助于提高可读性.)