需要 l值作为赋值 2 的左操作数

lvalue required as left operand of assignment 2

提问人:zxcmaxik 提问时间:12/2/2022 更新时间:12/2/2022 访问量:34

问:

#include <iostream>
using namespace std;
int main()
{
    int g1, m1, s1, g2, m2, s2, x, y, z;
    cin >> g1 >> m1 >> s1 >> g2 >> m2 >> s2;
    x=g1+g2;
    y=m1+m2;
    z=s1+s2;
    if(m1+m2>59) x+1 && y=y-60;
    if(s1+s2>59) y+1 && z=z-60;
    cout << x << y << z;
}

我是 c++ 的新手,不知道如何修复它,有人可以帮我吗?

C++ 语法错误

评论

1赞 Richard Critten 12/2/2022
我知道这个问题有答案。但是你能解释一下你想做吗?即使在答案中也是一个不寻常的表达。x+1 && y=y-60;x+1 && (y=y-60);
0赞 Remy Lebeau 12/2/2022
为什么有人想写这样晦涩难懂的代码?只需将其分解为多个表达式:if ((m1+m2)>59) { x+=1; y-=60; } if ((s1+s2)>59) { y+=1; z-=60; }
0赞 zxcmaxik 12/2/2022
我需要计算角度的度数、分度和秒数,如果超过 60 分钟,这应该增加 1 度数并将分钟值减少 60 度数
0赞 The Dreams Wind 12/2/2022
x + 1并且是临时的,不会分配给方案中的任何内容。你的意思是/相反吗?y + 1x += 1y += 1
0赞 Richard Critten 12/2/2022
@zxcmaxik 那么你想要的是和类似的另一个 if 测试。{ ++x; y -= 60; }

答:

0赞 The Dreams Wind 12/2/2022 #1

问题在于赋值运算符在表达式中的优先级最低=

if(m1+m2>59) x+1 && y=y-60;
if(s1+s2>59) y+1 && z=z-60;

因此,编译器看到的表达式如下:

(x + 1 && y) = (y - 60);
(y + 1 && z) = (z - 60);

并且不能赋值 和 的结果,因为它是一个 rvalue。(x + 1 && y)(y + 1 && z)

相反,您可能希望在评估以下结果之前进行分配:&&

if(m1 + m2 > 59) x + 1 && (y = y - 60);
if(s1 + s2 > 59) y + 1 && (z = z - 60);

评论

0赞 Richard Critten 12/2/2022
OP 已经阐明了表达式应该做什么。您可能需要更新答案。
0赞 The Dreams Wind 12/2/2022
@RichardCritten为了满足 OP 提供的要求,我必须完全重写这个表达式,因为增加 / 1 或减少 / 60 都不正确。输入可以是任何值,不限于 60 秒/分钟的范围。因此,答案将与原始问题无关。正如你所建议的,OP可能想问另一个问题来正确地对这部分进行排序xyyz