And*_*uţă -3 c++ error-handling function object
我是一名初学者程序员,这是我第一次发帖。我目前正在用 C++ 编写一个贪吃蛇游戏。游戏的大部分内容并不难实现,但当涉及到蛇的尾巴时,整个程序就崩溃了。我花了大约 2 个小时试图找出问题所在,然后我决定尝试重写有问题的代码。据我了解,我没有改变任何事情,但现在它有效了。有人可以向我解释一下发生了什么变化吗?这是代码,注释的代码无法正常工作,而其他代码则可以正常工作:
else {
bool eCoada = false;
for (int s = 0; s <= ntail; s++)
{
if (tail[s].height == j && tail[s].width == k)
{ eCoada = true; break; }
}
if (eCoada == false) cout << " ";
else cout << "o";
}
/* else {
bool eCoada = false;
for (int s = 0;s <= ntail; s++)
{
if (tail[s].height==j && k==tail[s].width==k)
{ eCoada = true; break; }
if (eCoada==false) cout << " ";
else cout << "o";
}
}*/
Run Code Online (Sandbox Code Playgroud)
另外我应该提到的是,这段代码是函数的一部分,如果您希望我发布完整的代码,我会这样做。
k==tail[s].width==k不等于tail[s].width == k. 您可能认为您已经写了类似的东西(k == tail[s].width) && (tails[s].width == k。但 C++ 不会自动添加&&这样的运算符。实际发生的情况是运算符的结合性==是从左到右的。所以这实际上意味着
(k == tails[s].width) == k
假设k和tails[s].width是ints,这意味着(k == tails[s].width)是 a bool。和 之间的比较k将检查是否k是0或1,而不是检查它是否与预期的宽度匹配。
另一个区别在于if(eCoada==false)线路的位置。
在您的工作代码中,它是在循环完成之后for,这意味着它只执行一次。
在损坏的代码中,它位于循环内部for,这意味着每次循环执行时都会打印一个空格。这也意味着,因为您在设置为 后break立即退出循环,所以您永远不会执行分支并且永远不会打印。eCoadatrueelseo
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |