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