error: lvalue required as left operand of assignment

#include <stdio.h>

int main(){
    float a[5];
    float e;
    int lo, hi, mi;
    int i;
    lo = 0; hi = 5;
    printf("please input e:");
    scanf("%f", &e);
    printf("please input array:");
    for(i = 0; i < 5; i++)
    scanf("%f",&a[i]);
    while(lo < hi){
        mi = (lo + hi)>>1;
        e < a[mi] ? hi = mi : lo = mi + 1; //这句报错;
    }
    printf("find the number: %f",a[--lo]);
}


错误信息:error: lvalue required as left operand of assignment,看字面意思是:赋值操作的左操作数必须使用左值。

于是我想应该就是条件表达式的优先级顺序导致的,于是就改为:

 (e < a[mi]) ? (hi = mi) : (lo = mi +1);

程序完美运行,这也就提示我们要经常加括号啊。我查了下资料,条件运算符的优先级比赋值运算符的优先级高,所以通常条件运算符的用法如下:

 x = y < 0 ? -y : y; //求一个数的绝对值;


附:

1、上面的例子的使用的编译器是codeblocks,报错。但是同样是不加括号,在c-free下是可以运行的,编译器之间还是有少许的区别的。

2、在线编译器有时候还真的挺好用,比如说像今天这种情况,可以测试程序的正确性啊。虽然缺点是速度慢点儿,还不能保存。

3、在线编译器:菜鸟教程在线编译器、ideone、dooccn,特别是dooccn,界面炫酷友好,操作还比较方便。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值