找出一个for还没有破坏

时间:2017-03-07 23:05:32

标签: c++ for-loop break

我在函数中有一个简单的for循环。

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        break;
    }
    if (/*for is not broken*/)
    {
    }
}

我应该写什么而不是:“/ * for not broken * /”?

我不想在循环外定义i。

我不想在循环外定义另一个变量。

4 个答案:

答案 0 :(得分:4)

如果没有其他变量,则不能,因为代码中的if语句范围中没有可以测试的变量。

答案 1 :(得分:4)

我发现你的约束非常奇怪:

  • 我不想在循环外定义我。
  • 我不想在循环外定义另一个变量。

有什么理由吗?为此使用变量是正常的。代码是关于可读性的,而不是试图获得最少的代码行。

但是,如果不使用额外的变量,唯一能做的就是在for循环中处理它。当你即将休息时。

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        if (some_condition)
        {
            HandleBreakScenario();
            break;
        }
    }
}

答案 2 :(得分:0)

通常使用变量:

bool didBreak = false;
for (int i = 0; i < 1; ++i)
{
    didBreak = true;
    break;
}
if (didBreak)
{
}

试图避免这种简单的解决方案,因为你提到的不明原因只会让你的生活更加艰难。

答案 3 :(得分:0)

最明显的答案是在循环中执行代码,然后中断,这在你的简单示例中看起来像:

void Func(void)
{
    for (int i = 0; i < 1; ++i)
    {
        {
           /* other stuff */
           break;
        }
    }
}

如果没有中断,通常意味着在循环外定义循环变量,当你想在循环外做其他事情时,通常会出现这个问题。这有点乱,但如果你把循环放在一个函数中,并返回true / false(我更喜欢这里的枚举,因为我个人不喜欢真/假的返回值,除非从函数名中很清楚它们是什么真的意味着。)

void LoopFuncReturnTrueOnBreak(void)
{
    for( /* loop conditions */ )
    {
        // stuff
        if ( /* condition */ )
        {
            return true;
        }
    }
    return false;
}

void Func(void)
{
    if (LoopFuncReturnTrueOnBreak())
    {
        /* other stuff */
    }
}