c语言左操作必须为左值

#include

void main()
{
char a;
scanf("%c",&a);
a>64 &&a96 && a }
这样输入是正确的,
#include

void main()
{
char a;
scanf("%c",&a);
a>64 &&a96 && a<123 ? printf("%c",a) : a=a+32 , printf("变换:%c",a);
}
这样就会提示错误,错误为

error C2106: '=' : left operand must be l-value

a>64 && a!= 96 && a<123 ? printf("%c",a) : ( a = a+32 ), printf("变换:%c",a);加上括号即可

三者表达式中,冒号左右都只能是一个表达式

回复qw502460751: c语言中三目运算符中的三个表达式必须为右值,也就是相当于()?():(),括号的内部如果是右值表达式,可以省去括号,括号内部若有左值表达式,需要进行左值到右值的转换,括号的优先级实现了这一转换,因此括号不可省略,这个问题也可以归结为 c = a = a+2, printf("%d",a) 与 c = ( a = a+2, printf("%d",a) ),因此,避免这种问题的方法是:加括号(在你觉得可能出现问题的地方)