以下程序给出错误
#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.(条件周围的括号不是必需的,但它们有助于提高可读性.)