【初心者向け】C言語のcontinueステートメントを使いこなして、スマートなループ処理を実現しよう!
continue
ステートメントは、ループ内の 現在のイテレーションのみをスキップ するために使用される制御フローステートメントです。 言い換えると、continue
が実行されると、ループの残りのステートメントがスキップされ、ループの 次のイテレーション へとすぐに進みます。
構文
continue;
使い方
continue
ステートメントは、for
、while
、do-while
ループの中でのみ使用できます。 以下の例をご覧ください。
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // i == 2 の場合はスキップ
}
printf("%d\n", i);
}
この例では、i
が 2 の場合は continue
ステートメントが実行され、printf
ステートメントがスキップされます。 よって、出力は以下のようになります。
0
1
3
4
利点
- 繰り返し処理を効率化できる
- 特定の条件下でのみ処理を実行したい場合に便利
- コードをより読みやすく、簡潔に記述できる
注意点
- ネストされたループで使用する場合、どのループから抜け出すのかを明確にする必要があります。
continue
ステートメントは、ループ内の 現在のイテレーションのみ をスキップします。 ループ全体をスキップしたい場合は、break
ステートメントを使用する必要があります。
応用例
- 複数のループをネストさせて複雑な処理を行う場合
- 特定の条件を満たさない限りループを続ける場合
- 特定の値を持つ要素のみを処理するループ
continue
ステートメントは、ループ内の処理を制御する便利なツールです。 適切に使用することで、コードをより読みやすく、効率的に記述することができます。
特定の値を持つ要素のみを処理するループ
この例では、1 から 10 までの整数をループし、3 の倍数のみを出力します。
for (int i = 1; i <= 10; i++) {
if (i % 3 != 0) {
continue;
}
printf("%d\n", i);
}
このコードは以下の出力を生成します。
3
6
9
特定の条件を満たさない限りループを続ける
この例では、ユーザーが入力する値が 10 になるまでループを続け、その値を出力します。
int main() {
int input;
do {
printf("数値を入力してください: ");
scanf("%d", &input);
if (input == 10) {
break;
}
} while (1);
printf("入力された値: %d\n", input);
return 0;
}
このコードは、ユーザーが 10 を入力するまで、入力を促し続けます。 10 が入力されると、ループが終了し、入力された値が出力されます。
複数のループをネストさせて複雑な処理を行う
この例では、2 つのループをネストさせて、2 つの配列の要素を掛け合わせて表示します。
int array1[] = {1, 2, 3};
int array2[] = {4, 5, 6};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) {
continue;
}
printf("%d * %d = %d\n", array1[i], array2[j], array1[i] * array2[j]);
}
}
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
これらの例は、continue
ステートメントをどのように使用して、ループの処理を制御できるかを示すほんの一例です。 状況に応じて、さまざまな方法で continue
ステートメントを創造的に活用することができます。
continue
ステートメントは、ループをより効率的にするために使用できますが、乱用するとコードが読みづらくなる可能性があります。 適切な状況で使用することが重要です。- 上記の例では、わかりやすさのためにシンプルなコードを使用しています。 実際のプログラミングでは、より複雑なロジックやエラー処理が必要になる場合があります。
goto ステートメント
goto
ステートメントを使用して、ループ内の別の場所にジャンプし、残りのイテレーションをスキップすることができます。 以下の例をご覧ください。
for (int i = 0; i < 5; i++) {
if (i == 2) {
goto next_iteration; // i == 2 の場合はスキップ
}
printf("%d\n", i);
next_iteration:
}
この例は、continue
ステートメントを使用した例とほぼ同じ出力を生成します。 しかし、goto
ステートメントは、コードが読みづらくなり、スパゲッティコードと呼ばれるような、メンテナンスが困難なコードにつながる可能性があるという欠点があります。
別のループを使用する
場合によっては、別のループを使用して、continue
ステートメントを使用するよりも、より明確で簡潔なコードを書くことができます。 以下の例をご覧ください。
int main() {
int numbers[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
if (numbers[i] % 2 == 0) {
continue; // 偶数の場合スキップ
}
printf("%d\n", numbers[i]);
}
// 偶数のみに絞ったループ
for (int i = 0; i < 5; i++) {
if (numbers[i] % 2 != 0) {
printf("%d\n", numbers[i]);
}
}
return 0;
}
この例では、最初のループはすべての要素を処理し、2 番目のループは偶数の要素のみを処理します。 この方法は、continue
ステートメントを使用するよりも、コードが明確で読みやすくなります。
条件付きステートメントを使用する
場合によっては、条件付きステートメントを使用して、continue
ステートメントを使用するよりも、より柔軟で制御性の高いコードを書くことができます。 以下の例をご覧ください。
for (int i = 0; i < 5; i++) {
int result = process_number(i);
if (result == 0) {
continue; // 処理が成功しなかった場合はスキップ
}
printf("処理結果: %d\n", result);
}
この例では、process_number
関数は、処理が成功した場合は 0 以外の値を返します。 処理が成功しなかった場合は、continue
ステートメントを使用して、ループの現在のイテレーションをスキップします。 この方法は、continue
ステートメントを使用するよりも、コードがより柔軟で制御しやすくなります。
continue
ステートメントは、ループ内の処理を制御する便利なツールですが、状況によっては、代替手段の方が適切な場合があります。 上記の代替方法を理解し、状況に応じて適切な方法を選択することが重要です。
- パフォーマンス: 場合によっては、
continue
ステートメントよりも、代替手段の方がパフォーマンスが優れている場合があります。 - コードの保守性: 将来的に変更やメンテナンスが容易なコードを書くようにしましょう。
- コードの可読性: 常に、最も読みやすく、理解しやすいコードを書くことを心がけましょう。