2017-03-07 122 views
-1

我有一个简单的函数内循环。找出一个for是否没有坏

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

我应该写什么来代替:“/ * for not not broken * /”?

我不想在循环外定义我。

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

回答

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 */ 
    } 
} 
+0

其实我需要做些事情,如果没有中断。你的答案(使用函数)正是我所需要的。 –

+0

请接受答案,如果它给你你想要的东西,当然如果你真的需要在环没有中断时发生什么事,你应该把它放在你的问题中。 –

4

因为代码中的if语句的范围中没有可以测试的变量,所以不能没有附加变量。

0

通常你使用一个变量:

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

试图避免你提到的晦涩的原因,这简单的解决办法只是让你的生活困难。

4

我找到你的约束很奇怪:

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

这是什么原因?为此使用变量是正常的。代码是关于可读性的,而不是试图实现最少的代码行。

但是你可以不使用额外的变量就可以做的唯一事情就是在for循环中处理它。当你即将破裂时。

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

原因:我在一个复杂的函数中反复使用这个模式,我试图阻止在函数中向我的范围添加更多变量。 –

+0

你的回答是对的,因为其实我需要做的事情没有坏(对不起,我的错误,我编辑它。)。 –

相关问题