2013-03-13 88 views
-2
for (i=0;i<3;i++) 
{ 
    if(z == 3) 
    { 
     z = 0; 
    } 
    z++; 
    if(!(ar[i][z] == 'X') & (z < 3)) 
    winrow == 0; 
} 

當我逐行調試程序時,第二個if語句被跳過。 一切都已初始化,這只是一個片段。 任何理由爲什麼這樣做?如果語句被跳過C++

+0

也許條件是錯誤的,而不是真的? – 2013-03-13 20:42:48

+5

我懷疑你可能並不是指'winrow == 0'。我強烈建議打開你的編譯器警告,因爲它幾乎肯定會提醒你這樣的問題。 – 2013-03-13 20:42:49

+0

這是問題,謝謝。 – user2157177 2013-03-13 20:44:56

回答

0

可能你的情況是錯誤的。這是你試圖得到什麼?

if (ar[i][z] != 'X' && z < 3) 
3

winrow == 0是沒有副作用所以沒有什麼執行if條款是否是真正的一個錯字。

+0

非常迂腐,不知道'winrow == 0'沒有知道'winrow'類型和它是否有'operator =='定義的沒有副作用。另一方面,任何編寫這樣的代碼都值得他們得到的一切。 – 2013-03-13 20:57:27

+0

@PhilipKendall:當然你是對的。我會讓你的評論作爲免責聲明。 (但是如果你仔細想想,如果一個重載的'operator ==()'引入了副作用,這個問題就不會被問到......) – 2013-03-14 00:28:30

1

你說:

winrow == 0; 

在你的if語句的身體。這句話意味着什麼,它不分配任何東西,它沒有副作用。因此,編譯器可能(優化)將跳過它。您可能的意思是說winrow = 0;,這將分配0到winrow

0

代碼的第二部分沒有做任何事情。

winrow == 0 

檢查winrow是否等於0,並且只要您點擊方括號,該語句就會超出範圍。

+0

*語句*不會超出範圍。 – 2013-03-13 20:55:24