2 qw502460751 qw502460751 于 2015.06.10 22:57 提问

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

3个回答

Bruce_why
Bruce_why   2015.06.10 23:07
已采纳

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

nswcfd
nswcfd 回复Young_Liu: ?: 的优先级比较低,肯定不会高于加减乘除。
2 年多之前 回复
holle_word
holle_word 回复qw502460751: ?:的优先级大于加减乘除运算
2 年多之前 回复
holle_word
holle_word 回复qw502460751:
2 年多之前 回复
qw502460751
qw502460751 能给我说一下是怎么回事么,能详细讲解一下么,谢谢了
2 年多之前 回复
qw502460751
qw502460751 能给我说一下是怎么回事么,能详细讲解一下么,谢谢了
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.11 07:52

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

Bruce_why
Bruce_why   2015.06.11 13:00

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

Csdn user default icon
上传中...
上传图片
插入图片