for (i=0;i<3;i++)
{
if(z == 3)
{
z = 0;
}
z++;
if(!(ar[i][z] == 'X') & (z < 3))
winrow == 0;
}
當我逐行調試程序時,第二個if語句被跳過。 一切都已初始化,這只是一個片段。 任何理由爲什麼這樣做?如果語句被跳過C++
for (i=0;i<3;i++)
{
if(z == 3)
{
z = 0;
}
z++;
if(!(ar[i][z] == 'X') & (z < 3))
winrow == 0;
}
當我逐行調試程序時,第二個if語句被跳過。 一切都已初始化,這只是一個片段。 任何理由爲什麼這樣做?如果語句被跳過C++
可能你的情況是錯誤的。這是你試圖得到什麼?
if (ar[i][z] != 'X' && z < 3)
winrow == 0
是沒有副作用所以沒有什麼執行if
條款是否是真正的一個錯字。
非常迂腐,不知道'winrow == 0'沒有知道'winrow'類型和它是否有'operator =='定義的沒有副作用。另一方面,任何編寫這樣的代碼都值得他們得到的一切。 – 2013-03-13 20:57:27
@PhilipKendall:當然你是對的。我會讓你的評論作爲免責聲明。 (但是如果你仔細想想,如果一個重載的'operator ==()'引入了副作用,這個問題就不會被問到......) – 2013-03-14 00:28:30
你說:
winrow == 0;
在你的if語句的身體。這句話意味着什麼,它不分配任何東西,它沒有副作用。因此,編譯器可能(優化)將跳過它。您可能的意思是說winrow = 0;
,這將分配0到winrow
。
代碼的第二部分沒有做任何事情。
winrow == 0
檢查winrow是否等於0,並且只要您點擊方括號,該語句就會超出範圍。
*語句*不會超出範圍。 – 2013-03-13 20:55:24
也許條件是錯誤的,而不是真的? – 2013-03-13 20:42:48
我懷疑你可能並不是指'winrow == 0'。我強烈建議打開你的編譯器警告,因爲它幾乎肯定會提醒你這樣的問題。 – 2013-03-13 20:42:49
這是問題,謝謝。 – user2157177 2013-03-13 20:44:56