next!=NULL;printf("%d\n",list->data) && list = list ->next); but I take the error: lvalue required as left operand of assignment What is wrong? Also I would like to ask if this is faster than the traditional."> Anyway this is part of a rpg text based game I'm making. It's very crudely made but it's pretty stable so far. By the way, Player and Opponent are classes which I've made with the functions.">
1 Shakaran

Lvalue 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.

lvalue means left side value. Particularly it is left side value of an assignment operator.

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

Example:

In above example is lvalue and b + 5 is rvalue.

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

  1. Left of assignment operator.
  2. Left of member access (dot) operator (for structure and unions).
  3. Right of address-of operator (except for register and bit field lvalue).
  4. 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:

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.

Example 2:

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 ans*i=ans to ans*=i we can avoid that error. Here short hand operator expands like this, ans=ans*i. Here left side some variable is there to store result. But in our program ans*i 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.

Example 3:

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.

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.


#include<stdio.h>

 

intmain(){

    inta=5,b=5;

 

    if(a%b=0)

        printf("its crazy");

 

    return0;

}

#include<stdio.h>

 

intmain(){

    inta=5,b=5;

 

    if(a%b==0)

        printf("its crazy");

 

    return0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include<stdio.h>

 

intfindFact(intn){

    intans=1,i;

    

    for(i=1;i<=n;i++){

        ans*i=ans;

    }

 

    returnans;

}

 

intmain(){

    intn=5;

    intfact=findFact(n);

    printf("%d",fact);

 

    return0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#include<stdio.h>

 

intfindFact(intn){

    intans=1,i;

    

    for(i=1;i<=n;i++){

        ans*=i;

    }

 

    returnans;

}

 

intmain(){

    intn=5;

    intfact=findFact(n);

    printf("%d",fact);

 

    return0;

}

// misunderstanding ternary operator

#include<stdio.h>

 

intmain(){

    inta=5,b;

 

    a>=5?b=10:b=19;

 

    return0;

}

#include<stdio.h>

 

intmain(){

    inta=5,b;

 

    b=a>=5?10:19;

 

    return0;

}

Category: C Tutorials
Originally Posted by C Standard, 6.3.2.1p1

Anlvalue is an expression with an object type or an incomplete type other than void;(53)
if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
When an object is said to have a particular type, the type is specified by the lvalue used to
designate the object. A modifiable lvalue is an lvalue that does not have array type, does
not have an incomplete type, does not have a const-qualified type, and if it is a structure
or union, does not have any member (including, recursively, any member or element of
all contained aggregates or unions) with a const-qualified type.

(footnote 53) The name ‘‘lvalue’’ comes originally from the assignment expression E1 = E2, in which the left
operand E1 is required to be a (modifiable) lvalue. It is perhaps better considered as representing an
object ‘‘locator value’’. What is sometimes called ‘‘rvalue’’ is in this International Standard described
as the ‘‘value of an expression’’.
An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.

Leave a Comment

(0 Comments)

Your email address will not be published. Required fields are marked *