问题描述
首先,我只是一个初学者,所以如果这听起来很愚蠢,我很抱歉。
我目前正在用 C++ 做一个游戏,其中玩家的一举一动都对应着额外的金钱和时间扣除。每个玩家从 0 初始资金和 30 分钟的时间开始。我计划循环播放,直到两个玩家的剩余时间都为 0。
这是我的代码的一部分:
if ((groupNumber1 == 1))
{
cout<<"You Now have a total of "<<"$"<< initialMoney += teensMoney <<" and have "<< initialTime -= teensTime <<" minutes remaining."<<endl;
}
else if ((groupNumber1 == 2))
{
cout<<"You Now have a total of "<<"$"<< initialMoney += familyMoney <<" and have "<<initialTime -= familyTime <<" minutes remaining."<<endl;
}
现在当我运行程序时,它给了我这个:
[错误] 'int' 和 'const char [11]' 类型的无效操作数到二进制 'operator
我可以知道错误在哪里吗? 非常感谢!
解决方法
看起来像一个优先级问题。 += 将在 之后出现
initialMoney += teensMoney --> ( initialMoney += teensMoney )
,由于运算符优先级规则(<<
在 +=
和 -=
之前计算),您需要将算术表达式括起来,如下所示:
if ((groupNumber1 == 1))
{
cout<<"You now have a total of "<<"$"<< (initialMoney += teensMoney) <<" and have "<< (initialTime -= teensTime) <<" minutes remaining."<<endl;
}
else if ((groupNumber1 == 2))
{
cout<<"You now have a total of "<<"$"<< (initialMoney += familyMoney) <<" and have "<<(initialTime -= familyTime) <<" minutes remaining."<<endl;
}
,
回应@user4581301 的观点 - 您确定要在此处使用 +=
和 -=
吗?这将在打印输出后永久更改存储在这些变量中的值,我怀疑这是您想要做的。这也不会打印出正确的值 - 你明白为什么吗?
相反,只需使用老式的 +
和 -
:
if (groupNumber1 == 1)
{
cout << "You now have a total of " << "$" << initialMoney + teensMoney << " and have " << initialTime - teensTime << " minutes remaining." << endl;
}
else if (groupNumber1 == 2)
{
cout << "You now have a total of " << "$" << initialMoney + familyMoney << " and have " << initialTime - familyTime << " minutes remaining." << endl;
}
,
简化问题以减少我们得到的噪音
cout << a += b << endl;
由于 operator precedence,这被编译器解释为
(cout << a) += (b << endl);
和 b << endl
阶段没有意义。你可以通过用括号强制你想要的顺序来解决这个问题
cout << (a += b) << endl;
但我发现修改输出语句中的值会导致编程错误,因为即使您打算用 a
更新 +=
,人们也希望值从输出语句中来来去去不变。如果你真的想更新 a
的值,我会用
a+=b;
cout << a << endl;
如果您不打算更新 a
cout << a + b << endl;