【问题标题】:C++ E0137 expression must be a modifiable lvalue [closed]C ++ E0137表达式必须是可修改的左值[关闭]
【发布时间】:2020-04-02 16:32:22
【问题描述】:

我想做编码,比如输入你的用户名和密码,然后它会告诉你成功与否。

这是我的代码:

#include<iostream>
using namespace std;
int main()
{
    const int USR = 201910, PSW = 765705590;
    int user, psw;
    cout << "user:";
    cin >> user;
    cout << "password:";
    cin >> psw;
    if(user == USR && psw = PSW) // 2 errors: 1. E1037 expression must be a modifiable lvalue 2. '='left operand must be l-value
    {
        cout << "welcome to US bank!";
    }
    else if (user != USR || psw != PSW)
    {
        cout << "password  or username is wrong!";
    }
}

我是 C++ 的新手,你能帮我找出这两个错误吗?谢谢!

【问题讨论】:

  • psw = PSW 更改为psw == PSW

标签: c++ if-statement lvalue


【解决方案1】:

if(user == USR && psw = PSW) // 2 个错误:1. E1037 表达式必须是 一个可修改的左值 2. '='左操作数必须是左值

错误在这里:psw = PSW

通过operator precedence

user == USR &amp;&amp; psw = PSW

变成

((user == USR) &amp;&amp; psw) = PSW

现在见((user == USR) &amp;&amp; psw)。你认为这个表达式的结果是什么?它是truefalse,不是左值。

What are rvalues, lvalues, xvalues, glvalues, and prvalues?

简单来说,您将PSW 分配给什么?这是没有意义的,因为该表达式的 LHS 不是变量。

解决方案:

您可能会对这些错误感到惊讶,因为您实际上只是想比较 psw 是否等于 PSW,但您不小心使用了该赋值运算符。

psw = PSW 替换为psw == PSW

【讨论】:

  • 是的,这个问题是一个错字,但这是一个很好的答案。
  • 感谢您的解决方案,现在它正在运行!太好了,谢谢!
猜你喜欢
  • 2021-09-17
  • 2014-12-15
  • 2014-12-20
  • 2015-09-19
  • 2016-05-09
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多