C言語/continue
表示
< C言語
概要
[編集]continue ステートメントは、C言語のループ制御構文の一つで、現在実行中のループ反復を途中で終了し、次の反復へ制御を移します。これにより、特定の条件下でループ本体の残りの処理をスキップしつつ、ループ自体は継続することができます。
構文と基本的な使い方
[編集]continue;
continue ステートメントがループ内で実行されると、以下の動作が発生します:
#include <stdio.h> int main() { int i; for (i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; // 偶数の場合は以降の処理をスキップ } printf("%d ", i); // 奇数のみ表示される } return 0; }
実行結果:
1 3 5 7 9
このコードでは、偶数の場合に continue が実行され、printf() 文がスキップされます。
continue と各種ループの動作
[編集]continue ステートメントは for、while、do-while の各ループで異なる動作をします。
| ループの種類 | continue 後の動作
|
|---|---|
for
|
更新式(i++など)が実行され、条件判定へ進む |
while
|
直接条件判定へ戻る |
do-while
|
直接条件判定へ戻る |
for ループでの continue
[編集]#include <stdio.h> int main() { printf("for ループでの continue:\n"); for (int i = 0; i < 5; i++) { printf("ループ開始 i = %d\n", i); if (i == 2) { printf(" continue 実行\n"); continue; } printf(" ループ本体実行 i = %d\n", i); } return 0; }
実行結果:
for ループでの continue: ループ開始 i = 0 ループ本体実行 i = 0 ループ開始 i = 1 ループ本体実行 i = 1 ループ開始 i = 2 continue 実行 ループ開始 i = 3 ループ本体実行 i = 3 ループ開始 i = 4 ループ本体実行 i = 4
while ループでの continue
[編集]#include <stdio.h> int main() { printf("while ループでの continue:\n"); int i = 0; while (i < 5) { printf("ループ開始 i = %d\n", i); if (i == 2) { printf(" continue 実行\n"); i++; // continue の前にカウンタを更新する必要がある continue; } printf(" ループ本体実行 i = %d\n", i); i++; } return 0; }
実行結果:
while ループでの continue: ループ開始 i = 0 ループ本体実行 i = 0 ループ開始 i = 1 ループ本体実行 i = 1 ループ開始 i = 2 continue 実行 ループ開始 i = 3 ループ本体実行 i = 3 ループ開始 i = 4 ループ本体実行 i = 4
実用例:データ処理でのスキップ
[編集]#include <stdio.h> int main() { // 成績データ(0は欠席や未提出を表す) int scores[] = {85, 0, 92, 78, 0, 90, 88, 0}; int count = sizeof(scores) / sizeof(scores[0]); int sum = 0; int valid_count = 0; printf("有効な成績データ: "); for (int i = 0; i < count; i++) { if (scores[i] == 0) { continue; // 無効なデータはスキップ } printf("%d ", scores[i]); sum += scores[i]; valid_count++; } if (valid_count > 0) { float average = (float)sum / valid_count; printf("\n平均点: %.2f (有効データ数: %d)\n", average, valid_count); } return 0; }
実行結果:
有効な成績データ: 85 92 78 90 88 平均点: 86.60 (有効データ数: 5)
ネストしたループでの continue
[編集]continue は現在実行中の最も内側のループにのみ影響します。
#include <stdio.h> int main() { printf("ネストしたループでの continue:\n"); for (int i = 0; i < 3; i++) { printf("外側ループ: i = %d\n", i); for (int j = 0; j < 4; j++) { if (j == 1) { printf(" 内側で continue (j = %d)\n", j); continue; // 内側ループの現在の反復のみスキップ } printf(" 内側ループ: j = %d\n", j); } printf("外側ループの終わり\n\n"); } return 0; }
注意点と良い使い方
[編集]無限ループでの注意
[編集]while や do-while ループで continue を使用する場合、カウンタの更新や終了条件の変更を continue の前に行う必要があります。
#include <stdio.h> int main() { int i = 0; while (i < 5) { if (i == 2) { i++; // continueの前にカウンタを更新 continue; } printf("%d ", i); i++; } return 0; }
continue と if-else の比較
[編集]継続条件と処理条件が明確に分かれる場合、continue を使うとコードの可読性が向上することがあります。
// continue を使った場合 for (int i = 0; i < n; i++) { if (条件1) continue; if (条件2) continue; // 残りの処理(条件1も条件2も満たさない場合のみ実行) 処理A; 処理B; 処理C; } // if-else を使った同等のコード for (int i = 0; i < n; i++) { if (!条件1 && !条件2) { 処理A; 処理B; 処理C; } }
まとめ
[編集]continue ステートメントは、特定の条件下でループの現在の反復をスキップするための強力なツールです。適切に使用することで、コードの可読性や効率を向上させることができます。ただし、過度に使用するとプログラムのフローが複雑になる可能性があるため、明確な目的がある場合に限って使用することをお勧めします。