提问人:zxcmaxik 提问时间:12/2/2022 更新时间:12/2/2022 访问量:34
需要 l值作为赋值 2 的左操作数
lvalue required as left operand of assignment 2
问:
#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++ 的新手,不知道如何修复它,有人可以帮我吗?
答:
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可能想问另一个问题来正确地对这部分进行排序x
y
y
z
评论
x+1 && y=y-60;
x+1 && (y=y-60);
if ((m1+m2)>59) { x+=1; y-=60; } if ((s1+s2)>59) { y+=1; z-=60; }
x + 1
并且是临时的,不会分配给方案中的任何内容。你的意思是/相反吗?y + 1
x += 1
y += 1
{ ++x; y -= 60; }