![]() |
|
制御文その3−if else文if文は条件によって実行する文を変えることを知る if else文 〜条件分岐〜if文がプログラムの全てといってもいいでしょう。今までの制御文はくり返すだけでしたが、この制御文は場合によって実行する文を変えるという機能を持っています。この制御文を使うことで、プログラミングの世界は広がります。
英語のつづりからも分かるように、もし「式」が真なら「文1」を、偽なら「文2」を実行します。また「else」以下は省略することができます。
この例は何をやっているか分かりますか? while文によって無限ループを作っています。ループの中ではiをひとつずつ増やしていって、もしiが10になったらbreak文を実行して無限ループから脱出しています。つまり、while文とif文でfor文のまねをしています。 if else文も所詮は文ですから、「if文の文を書くところ」にifを書くことによって複雑な処理をすることができます。
ちょっと普通の書き方から外れていますが、C言語はフリーフォーマットで記述できるので、書く位置はどこでもかまいません。逆にこの例を普通に書いてしまうと見にくくなります。いつでも見易いプログラムを心掛けてください。そうするとバグも見つけやすくなります。 ところで、この例はa,b,c三つの変数の大小関係を調べて画面に文章を表示するプログラムです。このままコンパイルすると、「aはbより小さく、bはcより小さいので、aはcより小さい。」と表示されます。変数の値を変えたり、いろいろ試してif文の動作を理解してみてください。 さて、次の例はちゃんとコンパイルができますが、プログラマの意図に反した動作をします。どこに誤りがあるのでしょうか。
プログラマは「aには101が入っているから、100ではないとの旨のメッセージが表示される」ことを期待してこのプログラムを作りました。しかし画面には何も表示されません。いったいどうしたことでしょうか。aに100、bに201を入れると、画面にはどんな文字が表示されましたか? どうしてそんな文字が表示されたのでしょうか。「コンパイルができるのに、しかもちゃんと実行されるのに、なぜかうまく動いてくれない」これは初心者がC言語でつまずきやすいパターンです。よく考えてから次を読んでください。 さて、例の謎は解けましたか?
前の例をちょっと書き換えてみました。これを見ればどうしてそうなったのか一目瞭然ですね。では、プログラマが意図した通りにこのプログラムが動くように前の例を書き換えておきます。
前回の間違った例は、確かに人の目から見ればちゃんと動くように見えるのですが、コンパイラの目から見ればそうは行きません。なぜなら空白や改行を無視するからです。 「コンパイルできるのに…」という状態に陥ったときは、先入観を捨ててコンパイラの目になってソースを吟味してみる必要があります。それでもだめなら、外に行ってランニングでもして頭をリフレッシュしてからもう一度見てみてください。「あっ、そーいうことだったのか〜、ばっかだなー俺っ」と、大きな声をあげてみんなをびっくりさせていることでしょう。 たくさん失敗を重ねていけば、その分だけこのような失敗は少なくなっていきます。そしてどんどんソースを組む時間が短縮されていきます。そしてそのころには、あなたはもう誰からも尊敬される、上級のプログラマになっていることでしょう。 まとめ。
(1997/01/30公開 1999/03/13 改) ちょっと休憩のコーナー
|
![]() |
著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.