ループの基本 (while 文)
今回は while 文を使って遊んでみます。
"while 〜" は、〜のあいだ、という意味です。
while( 中身 ) の中身も、前のページの、if( 中身 ) と同じく、0か、そうでないか( non-zero : ノンゼロ ) が重要です。このことは、for( ;
この部分 ; ) 文の条件判定部分 (この部分) でも同じです。while 文では、( ) の中身が non-zero の間だけ実行内容が永遠に繰り返され、0になるとループは中断して、次の制御に移ります。ともあれ、やりましょう。
以下の例では、while 文の条件部は、1 で、これでは常に 1 だから、そこの部分だけ見れば、これは永遠に続く 「無限ループ」です。
コンパイルして実行すると、「続けますか?」 に 「OK」 と答えている間は、延々とプロセスは終了せず、質問攻めにあいます。質問攻めに飽きたら 「CANCEL」 を選択してください。
まず、while( 1 ) の部分は、これが原因でコンパイラから 「警告」 されてしまいます。while 文のすこしきれいでない使い方のように思われるのですが、よく使う書き方でもあるので、示してあります。この部分のみに注目すれば、この while 文は、条件は常に「真」(ゼロでない) だから、"永遠に" 続いてしまうことになります。今回の場合では、「CANCEL」 を選択すると、break ; のところに制御がいくので、そのおかげで、ループは終了し、ループから抜け出します。
continue 文は、「繰り返し文」 のループの最後に制御を移す、または単純にジャンプする、ための文です。最後といってもループから抜け出すのではありません。break は、ループから抜け出すということはつまり、break は、} の直後、continue は、} の直前、にジャンプする、と言えばすこし整理できます。また、必ず ; がついて、continue ; となります。
continue 文は、break に比べると、遥かに使用頻度が落ちるものです。本当はこの例では使用しなくても済みます。文法的な意味は少し異なってきますが、今回の場合は、
if( ret == IDOK ) continue ; を、if( ret == IDOK ) ; のようにしても、やりたいこととしてはおんなじです。また、break , continue 文は、for 文でも同じ使われ方をします。
わたくしとしては、かなりプログラムが書きたいだけなので、先の例は、ほんとうはこんなふうにコンパクトにしたかったのです。
//
// program "challange3.cpp"
// bcc32
見比べてみましょう。おぉ!なんとコンパクトなのでしょう。
変数 ret は使いません。だから int ret ; による宣言が不要で、
while の条件吟味部分が、 if と break と continue を使ったループ脱出の仕組みを、それ一つで兼ねています。 ・・・まずなにしろ繰り返しがやりたいから、まず while( 1 ) と書いて、えーっとそれから・・・、と組んでいくと、おそらく先の例のようになりますね。たくさんのコードに触れていくと自然と見通しがよくなってくるので、自然と後者のようなコードを書くようになります。
... MB_APPLMODAL )) ;
のようになっているところは、... MB_APPLMODAL )) {} のようにすることもできます。これらは、「(演算を)何もしない」 ことを表しています。あまり意味がありませんが、... MB_APPLMODAL )) {;} でも同じことです。{} の中身には、複数の実行単位を記述することができます。どんなときでも常に {} をつかう習慣にしておけば問題はありませんが、省略して ; を使い始めたら、; の付け忘れに注意です。例えば上の例で ; を忘れてしまったら、while( ... ) return 0 ; というコードになってしまい、この手のミスは結構痛いバグとなるのです。※
... MB_APPLMODAL )) {;} ; としてしまうと、若干意味が異なってきます。最後の ; は無意味な ; には違いありませんが、赤い部分とは独立した、一つの実行単位になるからです。
if 文でも、if( ret == IDOK ) のような書き方ができましたが、while() 文でも同じです。while( ret == IDOK )... (ただそれは、書き方はそういうことができるということで、上の例では・・・、おそらくメッセージボックスは一度も出ないで終了するのではないでしょうか・・・)
そして、if 文も、while 文も、for 文も、( ) の中身が、 0 か そうでないか(non-zero) が重要です。
※ 条件が真、とは、条件評価の値が non-zero のこと(0でないこと)。反対は、「偽(ぎ)」で、0 のことです。関係ありませんが、マイナスの数(負)ではありません。マイナスの数は、0ではないから、「真」です。
上記2例とも、同じ内容のプログラムです。
実行は、コンパイル後、challange3 [リターン] です。
こりゃしつこいなぁ・・・
つぎは、Coffee Break.(ここでのことの補足を少々と、宣言だの定義だの、言葉のおはなし)
[トップ] [インデックス] [前へ] [次へ]