2011-08-16 9 views
47

一部の古い会社のコードを見ると、私はこのようになりますループのために出会いました:forループは、特に(;;)に対してどのように動作しますか?

for (;;) { 
    //Some stuff 
} 

私がグーグルを試みたが、すべての答えを見つけることができませんでした。私はプログラミングクラスで眠りに落ちたのですか?これは普通ではありませんか?基本的

while(true) { 
    //Some Stuff 
} 

、無限ループの代替構文:

答えて

70

forループは次のような構造を持っている -

for (initialization statement; condition check; update) 
    loop body; 

あなたが見ることができるように、ここでは4文がある -

  1. 初期化ステートメントは:この文は1回だけ実行され、ときループが最初に入力されます。これは省略可能なステートメントです。つまり、このフィールドを空白にしておくことを選択できます。一般的には、初期化の目的で使用されます。
  2. 条件付きチェック:このステートメントはおそらく最も重要なステートメントです。特定の式が真と評価されるかどうかをチェックします。そうであれば、ループの実行が継続されます。このフィールドを空にしておくと、trueと評価されます。
  3. 更新:このステートメントリストは左から右に実行されます。通常、変数を増減するために使用されます。
  4. ループボディ:条件チェックの真偽値に基づいて何度も繰り返し実行されるループの本体です。

これは基本的に実行がどのように続くかを示しています。最初は、ループが初めて入力されたときに初期化文が1回実行されます。次に、条件付きチェックが実行され、それが真と評価されたかどうかが確認されます。そうであれば、ループ本体が実行され、そうでなければループ実行が終了する。その後、Updateステートメントが実行されます。次に、条件チェックが再度実行され、trueと評価された場合は、再度ループ本体が実行され、更新ステートメントが実行され、再び条件チェックが実行されます。

ここではfor(; ;)の構文についてです。初期化文がないので、何も実行されません。条件判定文も空であるため、真と評価されます。その後、ループ本体が実行されます。次に、更新ステートメントは空であるため、何も実行されません。条件チェックが再び実行され、再び真と評価され、この全プロセスが再び繰り返されます。

これは、基本的に無限ループで初期化文がなく、その条件付きチェックは常にtrueと評価され、update文はありません。これは、-

while(true) 
{ 
    ..... 
} 

と同じです。これは、Javaのもう1つの一般的なループ構成です。

このような無限ループを使用する場合、ほとんどの場合ループを無期限に実行できないように、破損条件に注意することが重要です。これらの種類のループから抜け出すには、breakステートメントを使用します。以下のような構造である -

if(some_condition_is_true) 
    break;  // This will cause execution to break out of its nearest loop 

又は

if(some_condition_is_false) 
    break; 
34

これは同じです。

+0

私たちに教えてもらえますがdは無限ループを使用しているので、私は複数の機会にしばらくの間(真)の有罪です。 –

+2

私は彼らが便利なところに自分の瞬間を持っているように感じています – user489041

+4

少なくとも、あなたがコードを読んでいる人がそれを理解する可能性が高いと思われる間は(真実)... – PeterT

6

このループにはガードがなく、while(true)ループとして機能します。それは休憩まで無限にループします。

+3

またはリターン! ...〜 –

+10

またはスタックオーバーフロー –

+0

ループの先頭に戻るスタックがないので、このスタックがオーバーフローするとは思わないはずです。 – Wes

2

無限ループです。 initialization文、condition文、およびincrement文はすべてオプションであるため、それらのいずれもなくても、改行がヒットしたり、他の構文が相互作用したりしない限り、常にループします。

私は、Javaについて不明だが、this questionはネットであなたの空forwhile (true)はまったく同じことをコンパイルする方法を説明します。 Javaがそうであれば私は驚かないだろう。

3

無限ループです。直感的ではないため実際にはコンパイルされていないか、ランタイムエラーが発生していないため、コーディングが正確ではありません。 while(true) { /* code */ }と書き直すと、無限ループを示すためにはるかに読みやすくなります。 Javaで

+0

あなたのコード例で閉じる括弧を忘れてしまった; D –

+0

あなたは私のコードがインラインコメントのために書かれた閉じ括弧をピックアップしないということは間違いありませんが、ただ一つの行にまとめたいと思っています。 –

8

これらはすべて無限ループ

for(;;) { 
    // endlessly 
} 

while(true) { 
    // endlessly 
} 

do { 
    // endlessly 
} while(true); 
0

/* ループ

5ドル

1チョコレートつつあります= 1ドル

while my money is greater than 1 bucks 
    select chocolate 
    pay 1 bucks to the shopkeeper 
    money = money - 1 
end 

が家に来て、私のお金= 0ドル */

#include<stdio.h> 
int main(){ 
    int money = 5; 

    while(money >= 1){ 
    printf("inside the shopk and selecting chocolate\n"); 
    printf("after selecting chocolate paying 1 bucks\n"); 
    money = money - 1 ; 
    printf("my remaining moeny = %d\n", money); 
    printf("\n\n"); 
    } 

    printf("dont have money cant go inside the shop, money = %d", money); 

    return 0; 
} 

無限のお金

while(codition){ // condition will always true ....infinite loop 
    statement(s) 
} 

より良く理解 ためにこのビデオを参照してくださいので、カントはしばらくの間お店に行きますhttps://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s

関連する問題