C/C++プログラミング入門 – ループ処理

この記事は1年以上前に掲載されたものです。 情報が古い場合がありますのでお気を付け下さい。

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を中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。