はじめに
- これまでの学習に続いて、今回はfor文について学んだ結果をまとめてみました。
学習環境
- 今回はpaiza.ioのC言語のエディタを使いました。
構文
- 以下の構文はこちらのサイトから引用したものですが、Javaと同じ構文なので覚えやすいと感じました。
for (初期化式; 継続条件式; 変化式) {
// 継続条件式がtrueのときに繰り返す処理
}
サンプルコード
基本的なfor文の使い方
- 以下のサンプルコードでは、カウンタ変数
i
を0から1ずつ増やして、計5回繰り返しています。
main.c
#include <stdio.h>
int main(void){
for (int i=0; i<5; i++) {
printf("%d回目のループです。\n", i+1);
}
}
実行結果
1回目のループです。
2回目のループです。
3回目のループです。
4回目のループです。
5回目のループです。
配列との組み合わせ
- 配列と組み合わせる場合には、配列の要素数に合わせてループさせる必要がありますが、これがJavaやC#と比べて少々厄介です。
- C言語では
{配列}.length
のように配列の要素数を直接調べる方法がないため、sizeof演算子
を使って間接的に配列の要素数を求めます。-
sizeof(配列)
で配列全体のサイズを求めた後、sizeof(配列のデータ型)
で1要素分のサイズを求めて、配列全体のサイズ÷1要素分のサイズ
で配列の長さを求めています。
-
main.c
#include <stdio.h>
int main(void){
int int_ary[8] = {0, 1, 1, 2, 3, 5, 8, 13};
// 配列全体のサイズ÷1要素分のサイズで、配列の長さを求める。
int ary_size = sizeof(int_ary) / sizeof(int);
for (int i=0; i<ary_size; i++) {
printf("%d番目の要素は%dです。\n", i+1, int_ary[i]);
}
}
実行結果
1番目の要素は0です。
2番目の要素は1です。
3番目の要素は1です。
4番目の要素は2です。
5番目の要素は3です。
6番目の要素は5です。
7番目の要素は8です。
8番目の要素は13です。
無限ループとbreak
- 初期化式、継続条件式、変化式を書かず、
for (; ; ) {...}
と書くと無限ループになります。 - 本当に無限ループしてしまうとまずいので、以下のコードでは
break
を使って100回繰り返した所でループを抜けるようにしています。
main.c
#include <stdio.h>
int main(void){
// ループ回数のカウンタ
int loop_cnt = 0;
for (; ;) {
loop_cnt++;
if (loop_cnt==100) {
break;
}
}
printf("%d回ループしました。", loop_cnt);
}
実行結果
100回ループしました。
continueによる処理のスキップ
- 任意の場所に
continue
を入れることで、以降の処理をスキップさせてループの先頭に戻すことができます。
main.c
#include <stdio.h>
int main(void){
printf("奇数だけを出力します。\n");
for (int i=1; i<=10; i++) {
if (i%2==0) {
continue;
}
printf("%d\n", i);
}
}
実行結果
奇数だけを出力します。
1
3
5
7
9