★基本制御文(反復構造:for4)★
ここでは、「for文の苦手なこと」を書きます。
以前、説明したように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文と同じような使い方が可能です。
可能ですが、最初に書いたように「繰り返し回数が決まっているかどうか」で使い分けをしておく方が良いと思います。
※以前書きましたが、whileでの無限ループは警告レベルを4にしておくと次のような警告が表示されます。
warning C4127: 条件式が定数です。
ところが、for文の無限ループではこの警告は出ません。
「警告」もきちんと対処すべきものだと思いますので、以降無限ループを記述する時は、for(;;)を使います。
次に、「初期値」と「増分」の部分について、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;
} |
<実行結果 VC++ Express Edition>
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の扱いを書きます。