2013-03-13 67 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