我是初學者,這是我第一次發帖。我目前正在用 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";
}
}*/
另外我應該提到這段代碼是函式的一部分,如果你想讓我發布完整的代碼,我會這樣做。
uj5u.com熱心網友回復:
k==tail[s].width==k不一樣tail[s].width == k。你可能認為你寫過類似的東西(k == tail[s].width) && (tails[s].width == k。但是 C 不會自動放入&&這樣的運算子。實際發生的是運算子的關聯性==是從左到右的。所以這實際上意味著
(k == tails[s].width) == k
假設kandtails[s].width是ints,這意味著(k == tails[s].width)是 a bool。那 和 之間的比較k將檢查 if kis 0or 1,而不是檢查它是否與預期的寬度匹配。
if(eCoada==false)如果您的線路,另一個區別是位置。
在您的作業代碼中,它在回圈完成之后,for這意味著它只執行一次。
在您損壞的代碼中,它位于回圈內部,for這意味著每次回圈執行時都會列印一個空格。這也意味著因為您在設定為break時立即退出回圈,所以您永遠不會執行分支并且永遠不會列印.eCoadatrueelseo
uj5u.com熱心網友回復:
C ,以及我所知道的任何其他語言,都不允許在一個陳述句中進行多重比較。你不能說是x == y == z,你必須把它們分解。如果(x ==y && y == z)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437745.html
