2017-03-07 36 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

你的回答是對的,因爲其實我需要做的事情沒有壞(對不起,我的錯誤,我編輯它。)。 –

相關問題