2016-11-07 16 views
-2

が、私はコードを読むと、このような構造whileループに出くわした間:Cプログラミング、ループ

while(q--) 

私は、これはポストデクリメント演算子であることを理解し、私はされている状況を理解していません条件が真の場合、whileループにお時間を

おかげで、コナー

答えて

6

whileループチェックをテストしました。

0と評価される式は偽とみなされ、0以外の式はすべて真とみなされます。 C Standardのセクション6.8.5から

反復ステートメントは、ステートメントは、制御式が0に 等しい比較するまで、ループ本体を繰り返し実行するために呼び出させます。 qがゼロであれば繰り返しは関係なく、ループ本体が繰り返し文から入力 であるかどうかにジャンプすることによって

だから、このループテストを発生します。 qが0にデクリメントされると、ループは終了します。

+0

非常に参考になりました、ありがとうございます。 –

+1

@ConnorShorten喜んで私は助けることができました。あなたが役に立つと思ったら、[この回答を受け入れる](http://stackoverflow.com/help/accepted-answer)を自由に感じてください。 – dbush

1

IN C a "TRUE"は、NON-Zero-Valueで表されます。したがって、ループは "q"が "0"に達するまで実行されます。

これは遅延プログラミングです。コードを明確かつ正確にするためにそれほど多くの努力を払っているわけではありません。

while((q - )!= 0)より適切でしょう。 または (q!= 0) { q--; // ....... }

+0

これはまた、その簡潔さのためにいくつかのものが好まれる慣用的なCである。共通のイディオムを理解できることは確かに重要です。しかし、私はこの建設が必ず怠惰であるとか悪いとは言いません。 –

0

whiletrueに括弧の間に何があるかを比較し、同時に作業を行うことができますので、基本的には、表現while(q--)

while(q == true) 
{ 
    q--; 
} 

に等しく、 for loopと同じです。 値1はtrueを意味し、値0はを意味するので、q= 0を持ってすぐにループスリップを引き起こす条件はfalseです。

関連する問題