プログラムを書いていると、同じ処理を何度も実行したくなることがあります。
そんな時は、forを使えばよいのです。

for(初期化処理; 継続条件; 終了処理){

}


forは{}の中を有効範囲とみなし、継続条件が真である限り有効範囲の処理を繰り返し続けます。

初期化処理は、forへ突入する際に1度だけ実行されます。

終了処理は、forの処理が1周する度に実行されます。

これはサンプルコードを見たほうが早いと思います。

102

手順を1つずつ追ってみましょう。
①forループへ突入(継続条件が真である時突入する)する際にLoopCountの値を1にします。

②継続条件が真であるか判定します。この場合、LoopCountが10以下であるかを判定します。
真ならば{}内の処理を実行します。偽ならばfor全体から脱出します。
ifに似てますね。

③printf("hello for loop \n");が実行されます。

④{}内の処理が全て終了したので、終了処理が実行されます。この場合、LoopCountの値が1加算されます。

⑤ ②へ戻ります。


このプログラムはループの終わりでLoopCountの値を加算し、LoopCountの値が10以下の間、文字列を表示します。LoopCountの値が11の時、forから脱出します。

また、for内部の書き方は必ずこうしなければならない訳ではありません。終了処理にインクリメントを使わず、LoopCount = LoopCount + 1と書いても問題なく動きますし、初期化の必要がなければ省略しても構いません。継続条件を省略すれば、∞ループを作ることもできます。

forの文法はあくまで、
for(初期化処理; 継続条件; 終了処理){

}

でしかないことを頭の片隅へ入れておいて下さい。
初期化処理, 継続条件, 終了処理の書き方はプログラマの自由です。
Cのforは式を書く際になんの制約も課さないので、終了処理で全く関係ない演算をしても文法上問題はありません。

問34:次の実行結果となるプログラムを書きなさい。
103


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ところでforの()の式は省略することができるのでした。では全て省略するとどうなるのでしょうか?
結論から言うと、∞ループになります。
つまり、有効範囲{}の中の処理を永久に実行し続けるということです。

このプログラムは*を∞に出力し続けます。
104

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
break;を使うことで、ループから脱出することができます。

このプログラムでは、*を1つしか出力しません。
105

ループ内部にてbreak;が発動すると、その時点で最も内側のループから脱出します。

これを利用して、ユーザーから特定の文字が入力されるまで、しつこく文字入力を要求するプログラムを書くこともできます。

106

forループが∞に続くので、nを選択した後はまたforの最初の処理に戻るのです。
yを選択することでifが発動し、forから脱出することができます。

補足:scanf(" %c", &Character);と書いているのは、scanfが文字の入力を受け付ける際、改行を読み込まない仕様の為です。その改行を切り捨てるためにスペースを空けているのですが、scanfの挙動については今は関係ない話なので、ここでは気にしないことにします。scanfは古い関数なのでこうなるとだけ理解しておいてくれればそれで良いです。


難35:2択クイズを出題するプログラムを書いて下さい。問題はなんでもよいですが、ユーザーが間違えた時は、再びユーザーへ入力を促すようにして下さい。