『C/C++プログラミング入門 – 条件分岐』ではC言語およびC++における条件分岐について説明した。ここでは、ループ処理について説明したい。
ループ処理の種類
C言語およびC++言語では大きく分けて以下の種類のループ処理が分けられる。
- for文
- while文
- do-while文
for文
for文は通常、以下のように書く。
[code lang=”c”]#include <stdio.h>
#include <stdlib.h>
int main() {
for (int i = 0; i < 10; i++) {
printf("現在の変数iの値: %d\n", i);
}
return EXIT_SUCCESS;
}[/code]
上記のコードはforを扱った文のサンプルコードである。for(…)の括弧は基本的に以下となっている。
for (ループに使用する変数の宣言およびその代入(1回だけ呼ばれる); ループ処理の条件(trueならforで囲まれた処理を行い、falseならスキップする); ループ終了後の処理(基本的にはi++など))
これによって、特定の回数を連続して処理を行うことができるようになる。
古い言語仕様での注意点
上記のコードの書き方は、C++またはC99以降の比較的新しい言語仕様のC言語のみ対応する。比較的古い言語仕様のC言語の場合、上記のコードではコンパイルエラーが発生する場合がある。その場合、以下のようにする必要がある。
[code lang=”c”]#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("現在の変数iの値: %d\n", i);
}
return EXIT_SUCCESS;
}[/code]
近年のコンパイラーではC99に対応している、あるいはC++で追加された仕様を独自でCで対応させている場合が多い為、通常はこのような書き方をする必要性はないが、古い言語仕様の場合も考えて覚えておいた方が良いだろう。
while文
while文は、主に以下のようなコードとなる。
[code lang=”c”]#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0;
while (i < 10) {
printf("現在の変数iの値: %d\n", i);
i++;
}
return EXIT_SUCCESS
}[/code]
上記のコードは実際には処理としてはfor文とほぼ同じである。これも、while(…)の括弧内の条件の結果がtrueの限り、何度もwhile内で書かれた処理が繰り返される。
do-while文
do…while文は、主に以下のようなコードとなる。
[code lang=”c”]#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0;
do {
printf("現在の変数iの値: %d\n", i);
i++;
}while (i < 10);
return EXIT_SUCCESS
}[/code]
do…while分の場合は、必ず1度はdo{}内の処理が行われた後、while部分の条件分岐でtrueの場合は、さらに同じ処理を繰り返す。前述のwhileとは違い、whileの条件に合致していなくても1度は処理を行われる点に気をつけなければならない。
無限ループ
for文およびwhile文、do…while文はいずれもあえて必ずtrueになるように書くことで無限ループにすることができる。例えば、
- for(;;)
- while(true)
- do{…}while(true);
とすれば、いずれもtrueとなるので、無限ループとすることができる。しかしながら、こうした場合に何らかの形で処理を抜け出さないと、永久に処理が終わらないこととなってしまい、OS側から強制終了しないといけない状態となってしまう。そうなってはよくないので、通常は特定の条件に達したらbreak文を使用して抜け出すようにしなければならない。
例えば、以下のようにするとよい。
[code lang=”c”]#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0;
while () {
printf("現在の変数iの値: %d\n", i);
i++;
if (i >= 10) {
break;
}
}
}[/code]
最後に
ここではfor、while、do-while文を使ったループ処理を説明した。これもプログラムでは当たり前のように使われる為、ぜひ使いこなせるようになりたい。条件分岐が絡む処理はほかにもあり、次回はそれについて説明できればと考えている。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。