制御構文その1 ループ(while編)


・ループ

 同じ処理を何度も繰り返すことをループといいます。 ループにはwhileforを使います。 whileは繰り返し回数が一定でない時に(例えばテトリスならゲームオーバーになるまでブロックを落とし続けるとか)、forは繰り返し回数が一定な時によく使います。

・while

 まずは簡単なwhileから。

while(条件式)
{
	処理
}
条件式を満たしている間{}内の処理を繰り返します。 処理の部分は何行でも書けます。 処理の途中で条件を満たさなくなった時にその回の処理だけは全部終えてからループを抜け}以降の行に実行が移ります。 最初から条件を満たしていなかった場合は{}内は全く実行されず素通りします。
while(a<b)
{
	a++;
	printf("aがbと等しくなるまで繰り返します\n");
}
この例ではループ部分だけ書いてますが変数の宣言、初期値代入等は前の行で済ませているものとします(以後も同じく)。 aがbより小さい間aに1ずつ加えてゆきaとbが等しくなったところで条件を満たさなくなりループを抜けます。 そしてその間メッセージが何度も表示され続けます。 aとbが等しくなった回もメッセージは表示されることに注意してください。 もうひとつ注意が必要なのはwhileの行には;がついていないことです。 whileは何か実行しているわけではなく実行の流れを変えているだけなのでいらないのです。 ;は命令の後ろにつけると覚えておいてください。 ちなみに{}内が一行の時は{}を省略することもできます。

・do-while

 whileと似たものにdo-whileという構文があります。

do
{
	処理
}
while(条件式);	(←この時だけ;がつくので注意)
これは
処理
while(条件式)
{
	処理
}
と同じことです。 条件を満たしているかに関わらずとりあえず一回は処理を実行したい時用です。

・条件式の書き方

 条件式に使う演算子としては大なり、小なり、以上、以下、イコール、ノットイコールが考えられます。 それぞれ>、<、>=、<=、==、!=を使います。 イコールが==で=ふたつというのが重要です。 =(代入演算子)と==(比較演算子)を混同しないでください(代入演算子は前に説明しましたね)。 a=b;はaにbの値を代入する命令、a==bはaとbが等しいという条件式です。 誰もが一度はwhile(a=b)とかやってハマるのでよく覚えておいてください。

 条件式どうしを論理演算子で組み合わせた条件式も存在します。 アンド、オア、ノットはそれぞれ&&、||、!です。 (a>2 && a<5) || !(b>a-10 && b<a+10)といった感じに(適当に書いた式なので意味はありません)。 念のため説明するとアンドは両方真なら真、オアはどちらでも真なら真、ノットは真なら偽、偽なら真です。

・for

 次章で説明します。