“循环最多运行一次(循环增量从不执行)”C ++

时间:2018-04-26 13:08:47

标签: c++ loops

我收到一个“循环最多会运行一次(循环增量永不执行)”错误导致循环不起作用,我无能为力?任何帮助将不胜感激。

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;
        }
    }
}

3 个答案:

答案 0 :(得分:1)

当你读到这篇文章时,你会知道为什么它不起作用: return statement

语法

attr(optional) return expression(optional) ;(1)

attr(optional) return braced-init-list ;(2)(自C ++ 11起)

  • attr(C ++ 11) - 任意数量属性的可选序列
  • 表达式 - 表达式,可转换为函数返回类型
  • braced-init-list - 括号括起的初始值设定项列表和其他braced-init-lists

说明

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循环中,您总是有一个返回值,它将在第一次迭代时返回一个值。它将始终返回030,然后不会继续下一次迭代。

你可能想要这个:

    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;
}