2016-10-05 3 views
-2
while(condition);{ 
    statement; 
} 

whileループの開始括弧の前にセミコロンを置いてはいけません。私が持っている質問は、実行時にプログラムがwhileループで動かない理由です。私が知っている限り、セミコロンは、コンパイラがステートメントの終わりに来たことをコンパイラに知らせる終了用の句読点です。 whileループの開始括弧は読み込まないので、次の行に移動してアクションを実行しないでください。デバッガを実行してステップごとに移動すると、whileステートメントでの移動が停止し、さらに進まなくなります。私は、なぜこれが当てはまるのか、いくつかの洞察を探しています。 whileの後に条件をつけ、その後にセミコロンを置いたときに開き括弧がコンパイルされるのはなぜですか?何らかのエラーが投げられるべきではありませんか?C++:whileループでブラケットを開く前にセミコロンを配置する

使用されているIDEはDev C++です。私は他のIDEでこれをテストしていないので、これがIDE特有の問題であるかどうかはわかりません。

+0

これは:while(条件);条件の後の空のブロックとして解釈されるので、何もしないループになります。 – Steeve

+1

0時には0の代わりにOを入れて、コンピュータの先生を混乱させる私のいたずらな友人を思い出させます。 – seccpur

+0

'while(condition);'はwhile(condition){} 'と書くことができます。あなたは 'while(condition){/ *無限ループ* /} {.../*到達不可能なコード* /}'を持っています。 –

答えて

6

あなたはおそらく、あなたの問題をより明確になり、より良いの書式を使用して、あなたのコードを書き換えることができます。

while(condition) 
    ; 

{ 
    statement; 
} 

conditionは(すなわち、非0)trueの場合、あなたは無限ループを繰り返します。

conditionがfalse(つまり0)の場合、実行は次のステートメントに進みます。

+0

AH。私は条件が真であるかどうかをチェックしなかった。もちろん、それは本当であり、私たちは無限ループに陥っていました。これは完璧な意味合いがあります。ありがとう! –

+0

@ Mosc0w:ようこそ。 –

4

whileループの定義は、whileループを使用するときに、それが唯一statementを実行します

while(condition) statement; 

です。あなたのステートメントは空(while(condition);)なので何も実行されず、ループは再びループします。これは永遠に続くでしょう。

あなたは全体{}ブロックが単一の文として扱われ

while (something) 
{ 
    //more stuff 
    //even more stuff 
    //and something else 
} 

のような何かを書きます。

+1

これはまた、「なぜセミコロンを挟んでコンパイルするのですか? – Steeve

1

私が知っている限り、セミコロンは、コンパイラがステートメントの終わりに来たことをコンパイラに知らせる終端記号です。

C++文法での;の役割はそれほど単純ではなく、簡単です。実際、C++の多くの(ほとんどではないにしても)多くのステートメントは、最後に;を持っていません。コンパイラが文の終わりを検出する必要はありません。

繰り返し文のうち、do文の末尾は;です。他の反復​​ステートメントは;で終了しません。これは、forまたはwhileに表示される;のいずれかが、実際にはループの本体の「ネストされた」ステートメントに属していることを意味します。あなたのケースでは

while (condition); 

は、その身体単なる;で構成されてちょうどwhileループ、です。この孤独な;は直接whileステートメントに属しません。この孤独な;は実際にあなたのループの本体を構成する空文に属します。言い換えれば、あなたのサイクルは

while (condition) 
    /* Empty statement */; 

と解釈されます。したがって、ループはその空のステートメントを無期限に実行し続けます。

オープニングブラケットと残りのコードは、ループとは無関係の独立した複合ステートメントとみなされます。

関連する問題