Error Lvalue Required As Left Operand Of Assignment Linked List

问题描述

lvalue required as left operand of assignment

关于左值的问题
这样是有问题的d>0?(c+=1):(d?a+=1:b+=1);
这样是没问题的if(d>0)
c+=1;
else if(d)
a+=1;
else
b+=1;
不理解为什么,请大神给好好讲一讲有关左值的问题

解决方案

d>0?(c+=1):(d?a+=1:**_(_**b+=1**_)_**);

解决方案二:

For example, in C, the syntax for a conditional expression is:

logical-OR-expression ? expression : conditional-expression
while in C++ it is:

logical-OR-expression ? expression : assignment-expression
Hence, the expression:

e = a < d ? a++ : a = d
is parsed differently in the two languages. In C, this expression is a syntax error, but many compilers parse it as:

e = ((a < d ? a++ : a) = d)
which is a semantic error, since th

解决方案三:

我试了没问题的啊

解决方案四:

应该没有问题啊。你用的什么编译器?

解决方案五:

d>0?(c+=1):(d?a+=1:b+=1);
如果d > 0;的话, 冒号后面的表达式即(d ? a +=1 : b+=1)不用计算了。

你的意思指的是这个吗?

解决方案六:

是不是 ?:表达式里:左右的表达式的地位是不一样的?左边允许是左值,右边不允许?
不清楚为什么,同问。

解决方案七:

http://stackoverflow.com/questions/6966299/error-lvalue-required-in-this-simple-c-code-ternary-with-assignment
优先级的问题。

解决方案八:

谢谢楼上,你的回答解决了我的问题,真的很感谢

解决方案九:

谢谢楼上,你的回答解决了我的问题,真的很感谢

【云栖快讯】直播推荐——现在报名3月12日编程语言系列讲座,与行业资深专家一起学习Python、C++、JavaScript、Java!还可在活动页面领取红包,百分百中奖哦!  详情请点击

云栖社区(yq.aliyun.com)为您免费提供c-lvalue required as left operand of assignment相关信息,包括 c 的信息 ,所有c-lvalue required as left operand of assignment相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_49948,您可以点击c-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.

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

0 comments

Leave a Reply

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