2011-02-08 16 views
1
while(thingA is true) 
{ 
} 
if(thingA is not true) 
{ 
    make thingA true 
    then back to looping 
} 

私の質問は、ループが真の場合はループを維持しますが、そうでない場合は、それを真にするために別のコードを実行します。それをしてもいいですか!?質問ループについて

+3

を! –

答えて

1

あなたが提供したコードブロックは、事実上無限ループです。その理由は、thingAがと評価されてループから抜け出すまで、〜whileループのままであるためです。次に、ifステートメントによって、それがfalseであるかどうかを確認するチェックが行われているか、またはwhileループが壊れていないことがチェックされます。それから、もう少しループします。

無限ループ内でthingAがfalseであることを確認し、特別なケースロジックを実行してください。

5

私が疑問に思うのは、何かが偽になるまでループしたい場合は、一度それが真に設定されてループし、条件を一切チェックしないのですか?なぜそうではないのですか:

私が指摘していることは、あなたがしたいことが真実であることを望んでいれば、なぜループを止めるのでしょうか?

2

あなたが説明しているのは、thingAの値にかかわらず、いつもループします(あなたはいつもループの中に戻ります)。 thingA変化の状態は、その後、あなたは、単に必要なときにあなたには、いくつかのアクションを実行する必要がある場合:

while (1) 
{ 
    if (!thingA) { /* Some action */ } 
    ... 
} 
0

コードを同じ関数で並べ替える代わりに、共通コードを別の関数に移動してみてください。これにより、コードを理解しやすくなり、フローを簡単に実行できます。あなたのケースでは

は、おそらくこのような何かしたい:あなたは無限ループを持っている上に書かれたよう

void MyLoopFunction() 
{ 
bool MyCheckVariable = true; 
while (MyCheckVariable) 
    { 
    ... 
    } 
} 

void SomeOtherFunction() 
{ 
// Keep executing until infinity 
while (true) 
    { 
    MyLoopFunction(); 
    // Fell out of the loop, do something else and retry 
    ... 
    } 
}