我收到一个“循环最多会运行一次(循环增量永不执行)”错误导致循环不起作用,我无能为力?任何帮助将不胜感激。
else if (Selection == 10)
{
if ((CompareArray[0] == 0 && CompareArray[1] == 0) ||
(CompareArray[0] == 1 && CompareArray[1] == 0))
{
for(i = 2; i < 6; i++)
{
if (CompareArray[i] == 0)
{
return 0;
}
return 30;
}
}
else if (CompareArray[0] == 0)
{
for (i = 1; i < 5; i++)
{
if (CompareArray[i] == 0)
{
return 0;
}
return 30;
}
}
else
{
for (i = 0; i < 4; i++)
{
if (CompareArray[i] == 0)
{
return 0;
}
return 30;
}
}
}
答案 0 :(得分:1)
当你读到这篇文章时,你会知道为什么它不起作用: return statement
attr(optional) return expression(optional) ;
(1)
attr(optional) return braced-init-list ;
(2)(自C ++ 11起)
1)在隐式转换为函数返回类型之后,计算表达式,终止当前函数并将表达式的结果返回给调用者。该表达式在返回类型为(可能是cv-qualified)void的函数中,在构造函数和析构函数中是可选的。
2)使用copy-list-initialization来构造函数的返回值。
答案 1 :(得分:1)
看看这个:
for (i = 1; i < 5; i++)
{
if (CompareArray[i] == 0)
{
return 0;
}
return 30;
}
在for
循环中,您总是有一个返回值,它将在第一次迭代时返回一个值。它将始终返回0
或30
,然后不会继续下一次迭代。
你可能想要这个:
for (i = 1; i < 5; i++)
{
if (CompareArray[i] == 0)
{
return 0;
}
}
return 30;
注意返回值在for循环之外,如果循环中没有值等于0,就会发生这种情况。
答案 2 :(得分:0)
我不知道你的目标是什么,所以不能建议你可能想要的解决方案,但为了避免错误并确保执行,你可以修改你的代码如下(也有一些小的改动使代码简洁):
else if (Selection == 10)
{
int start = 0;
if ((CompareArray[0] == 0 && CompareArray[1] == 0) ||
(CompareArray[0] == 1 && CompareArray[1] == 0))
start = 2;
else if(CompareArray[0] == 0)
start = 1;
for(i = start; i < (start+4); i++)
{
if (CompareArray[i] == 0)
return 0;
}
return 30;
}