C++错误"lvalue required as left operand of assignment"



我是c++的新手,我有一个问题,我必须在c++/C/Pascal语言中转换伪代码。答案在书的最后用Pascal写的

我的c++代码中的问题是,在第12行,我得到了可以在标题中找到的错误。任何想法?

Pascal代码:
var n,x:integer;
begin
  n:=0;
repeat
  write('x=');read(X);
  if x<>0 then
    if x mod 5 = 0 then 
      n:=n+1
    else 
      n:=n-1;
until x=0;
if n=0 then 
  write('yes')
else 
  write('no')
end;

My c++ Code:

int main()
{
    int x,n;
    cin>>x;
    while(x>0)
    {
        if(x>0)
        {
            if(x%5=0){
                n=n+1; 
            } else {
                n=n-1;
            }
        }
        if(n=0){
            cout<<"Yes"<<;
        } else {
            cout<<"No"<<; 
        }
    }
}

您有一个简单的拼写错误:if(x%5=0){是尝试 0赋值给x % 5(由于操作符优先级模数在赋值之前计算)。x % 5不能被赋值(它不是左值),编译器告诉你。

当然,解决方法是编写x % 5 == 0

在这种情况下,您很幸运,错误是在编译时处发现的。像if (n = 0)(在第18行)这样的东西可能不是,因为x = 0是一个值为0的表达式

有两种方法可以防止:

  • 确保你的编译器警告是你能承受的最激进的。对于gcc,我使用-Wall -Wextra,这个组合足以解决这个常见问题。
  • 一些开发人员将编写if (0 == x),因为错误的if (0 = x)将在编译时被拾取为试图分配给0。就我个人而言,我觉得这很混淆。

赋值操作符要求左值意味着左侧操作数必须是一个可以保存值的变量/位置。这就是错误的含义。
if语句中需要的==可能不是其他答案中提到的赋值

您需要在c++中的条件(while, if,…)中使用==进行相等性检查

if(x%5 = 0)

应为

if(x%5 == 0)

"x%5"不是左值,因为你不能给它赋值,因此出现错误。

相关内容

最新更新