以前、説明したようにwhile文とfor文の使い分けは以下のように考えれば楽です。
while文 → 繰り返し回数が決まっていない場合 for文 → 繰り返し回数が決まっている場合
しかしfor文でも繰り返し回数が決まっていないプログラムを書くことが出来ます。
<sample program 056-02>のプログラムを題材に説明します。
このプログラムは0を入力しない限り、ずっと終わりません。
カウンタが無いため「初期値」と「増分」が無い状態です。
一方、for文は「初期値」「繰り返し条件」「増分」をセットにしてある命令です。
このままでは書き換えは無理なように思いますが、実はfor文の「初期値」「繰り返し条件」「増分」は省略可能なのです。
上記のプログラムの場合「初期値」と「増分」がありませんので、次のように書き換えることができます。
<sample program 058-01>
#include <stdio.h> int main(void) { int input; scanf("%d", &input); for (; input != 0;) { scanf("%d", &input); } return 0; } |
for文の中を見てください。
「初期値」と「増分」を書くべき部分が省略されています。
「繰り返し条件」だけは残っていますので、while文と同じように使えるのです。
「繰り返し条件」も省略可能ですので、次のように書くと無限ループになります。
<sample program 058-02>
#include <stdio.h> int main(void) { for (; ;) { printf("Hello\n"); } return 0; } |
※Ctrlキーを押しながらCキーを押して止めてください。
このように、for文でもwhile文と同じような使い方が可能です。
可能ですが、最初に書いたように「繰り返し回数が決まっているかどうか」で使い分けをしておく方が良いと思います。
次に、「初期値」と「増分」の部分について、for文独特の書き方を説明します。
「初期値」と「増分」については「,(コンマ)」をつけることにより、複数の文が書けます。
#include <stdio.h> int main(void) { int counter1; int counter2; for (counter1 = 0, counter2 = 0; counter1 < 10; counter1++, counter2 += 2) { printf("counter1 = %2d : counter2 = %2d\n", counter1, counter2); } return 0; } |
<実行結果>
counter1 = 0 : counter2 = 0 counter1 = 1 : counter2 = 2 counter1 = 2 : counter2 = 4 counter1 = 3 : counter2 = 6 counter1 = 4 : counter2 = 8 counter1 = 5 : counter2 = 10 counter1 = 6 : counter2 = 12 counter1 = 7 : counter2 = 14 counter1 = 8 : counter2 = 16 counter1 = 9 : counter2 = 18 続行するには何かキーを押してください・・・
このプログラムには2つのカウンタ(counter1,counter2)があります。
counter1は初期値0で、1ずつ増えます。
counter2は初期値0で、2ずつ増えます。
counter1の初期値とcounter2の初期値は「,」で区切られて1箇所に書かれています。
同様に増分も「,」で区切られて1箇所に書かれています。
このように「初期値」と「増分」は「,」で区切ることが可能です。
しかし、見づらくなるため、あまり多用しない方が良いでしょう。
次回は、for文における、break文の扱いを書きます。