复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#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,看字面意思是:赋值操作的左操作数必须使用左值。
于是我想应该就是条件表达式的优先级顺序导致的,于是就改为:
复制代码
1(e < a[mi]) ? (hi = mi) : (lo = mi +1);
程序完美运行,这也就提示我们要经常加括号啊。我查了下资料,条件运算符的优先级比赋值运算符的优先级高,所以通常条件运算符的用法如下:
复制代码
1x = y < 0 ? -y : y; //求一个数的绝对值;
附:
1、上面的例子的使用的编译器是codeblocks,报错。但是同样是不加括号,在c-free下是可以运行的,编译器之间还是有少许的区别的。
2、在线编译器有时候还真的挺好用,比如说像今天这种情况,可以测试程序的正确性啊。虽然缺点是速度慢点儿,还不能保存。
3、在线编译器:菜鸟教程在线编译器、ideone、dooccn,特别是dooccn,界面炫酷友好,操作还比较方便。
最后
以上就是怕孤单路人最近收集整理的关于error: lvalue required as left operand of assignment的全部内容,更多相关error:内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复