2016-10-21 11 views
0

私はさまざまな設定を読み込む設定ファイルを持つアプリケーションを持っています。設定の1つは、アプリケーションが実行されているサイクルです。 この変数nLoops-1の場合、無限回数実行されるはずです。それ以外の場合は、x回実行します。 これは私がそれを実装した瞬間です。'while'( 'true')を 'break'で避け、 'for'ループを使用する方法はありますか?

//get nLoops from config file 

int i = 0; 
while (true) 
{ 
    if (nLoops > -1 && i >= nLoops) 
     break; 
    i++; 

    // do stuff 
} 
+1

whileの中ではなくwhileの中に条件を入れるだけです –

+0

理論的には、ループが無限に実行されるならば、継続的に 'i'を増やすべきではありません。なぜなら、' i'をオーバーフローさせて未定義のビヘイビア。実際には、おそらくあなたはそれを離れてしまいますが、問題を認識していることでしょう。 –

答えて

3

あなたが滞在する代わりに抜け出すためにテストしているので、ジャストif条件(逆に、置く:しかし、私はwhile(true)表現(私はここで警告を受ける)ことなく、よりまっすぐ進む方法があるかどう思っていました)while条件で:

while (nLoops == -1 || i < nLoops) 

またはforとして:

for (i=0; (nLoops == -1) || (i < nLoops); i++) 
+0

forループはループの 'stuff'部分を' i'とは異なる値で実行します: 'for(i = 0;(nLoops == -1)||(i ++ Andrew

+0

OPの 'nLoops> -1 && ...'の反転は 'nLoops <= -1 ||です。 ...(整数 'nLoops'と仮定します)。なぜこの答えが 'nLoops == -1'を使用しているのか不明です。 – chux

+0

@chux質問から:*この変数 'nLoops'が-1の場合、無限回実行するはずです*。元の状態は、それに基づいて不良だった。 – dbush

0

これは、Oを必要としより多くの(boolean)変数を使用しますが、ループ内でbreak文を使用しないでください。

// Here reads from configuration file 

    bool isInfiniteLoop = false; 
    i = 0; 

    if(nLoops == -1) 
    { 
     isInfiniteLoop = true; 
     nLoops = 1; 
    } 

    while(i < nLoops) 
    { 
     // here goes your code 

     if(!isInfiniteLoop) 
     { 
      // If NOT infinite loop: increment counter, otherwise while condition will always be 0 < 1 
      i++; 
     } 
    } 
2

あなたは警告を回避するためにfor(;;)while(true)を置き換えることができます。制御式が欠けているforループは、ISO/IEC 9899:1999 6.8.5.3/2などの標準で明示的に定義されています。

関連する問題