Solve error: lvalue required as left operand of assignment

In this tutorial you will know about one of the most occurred error in C and C++ programming, i.e. lvalue required as left operand of assignment.

lvaluemeans left side value. Particularly it is left side value of an assignment operator.

rvaluemeans right side value. Particularly it is right side value or expression of an assignment operator.

Example:
a = b + 5;
In above example a is lvalue and b + 5 is rvalue.

In C language lvalue appears mainly at four cases as mentioned below:

Left of assignment operator.
Left of member access (dot) operator (for structure and unions).
Right of address-of operator (except for register and bit field lvalue).
As operand to pre/post increment or decrement for integer lvalues including Boolean and enums.
Solve error: lvalue required as left operand of assignment
Now let see some cases where this error occur with code.

Example 1:

#include<stdio.h>
 
int main(){
    int a =5,b=5;
 
    if(a%b=0)
        printf("its crazy");
 
    return 0;
}

When you will try to run above code, you will get following error.

Solution:In if condition change assignment operator to comparison operator, as shown below.

#include<stdio.h>
 
int main(){
    int a =5,b=5;
 
    if(a%b==0)
        printf("its crazy");
 
    return 0;
}

Example 2:

#include<stdio.h>
 
int findFact(int n){
    int ans=1,i;
    
    for(i=1;i<=n;i++){
        ans*i=ans;
    }
 
    return ans;
}
 
int main(){
    int n=5;
    int fact=findFact(n);
    printf("%d",fact);
 
    return 0;
}

Above code will show the error: lvalue required as left operand of assignment operator.

Here problem occurred due to wrong handling of short hand operator (*=) in findFact() function.

Solution: Just by changing the line ansi=ans to ans=i we can avoid that error. Here short hand operator expands like this, ans=ansi. Here left side some variable is there to store result. But in our program ansi is at left hand side. It’s an expression which produces some result. While using assignment operator we can’t use an expression as lvalue.

The correct code is shown below.

#include<stdio.h>
 
int findFact(int n){
    int ans=1,i;
    
    for(i=1;i<=n;i++){
        ans*=i;
    }
 
    return ans;
}
 
int main(){
    int n=5;
    int fact=findFact(n);
    printf("%d",fact);
 
    return 0;
}

Example 3:

// misunderstanding ternary operator
#include<stdio.h>
 
int main(){
    int a=5,b;
 
    a>=5?b=10:b=19;
 
    return 0;
}

Above code will show the same lvalue required error.

Reason and Solution:Ternary operator produces some result, it never assign values inside operation. It is same as a function which has return type. So there should be something to be assigned but unlike inside operator.

The correct code is given below.

#include<stdio.h>
 
int main(){
    int a=5,b;
 
    b = a>=5? 10: 19;
 
    return 0;
}

Some Precautions To Avoid This Error
There are no particular precautions for this. Just look into your code where problem occurred, like some above cases and modify the code according to that.

Mostly 90% of this error occurs when we do mistake in comparison and assignment operations. When using pointers also we should careful about this error. And there are some rare reasons like short hand operators and ternary operators like above mentioned. We can easily rectify this error by finding the line number in compiler, where it shows error: lvalue required as left operand of assignment.

Comment below if you have any queries related to above tutorial.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值