Berbeda dengan break yang keluar dari loop sepenuhnya, continue hanya melewatkan sisa body loop untuk iterasi saat ini dan langsung melanjutkan ke iterasi berikutnya. Saat menulis loop, kita sering menemui kasus di mana sebagian iterasi perlu diabaikan—misalnya melewati bilangan genap saat hanya ingin memproses bilangan ganjil, atau melewatkan elemen array yang tidak valid tanpa menghentikan seluruh loop. Statement continue menyediakan mekanisme tepat untuk itu. Pada chapter ini kita akan menelaah sintaks continue, perbedaan perilakunya di for versus while, serta jebakan klasik yang sering menjebak pemula.
Sintaks Dasar continue #
Statement continue adalah keyword tunggal tanpa argumen:
continue;Saat continue dieksekusi di dalam body loop, kontrol melompat ke akhir body iterasi saat ini, melewati semua statement yang ada setelah continue. Perilaku selanjutnya bergantung pada jenis loop. Berdasarkan ISO/IEC 9899 §6.8.6.2:
- Di
for:continuemelompat ke ekspresiupdate(langkah ketiga darifor), lalu mengevaluasikondisi. - Di
whiledando-while:continuemelompat ke evaluasikondisidi awal (atau akhir untukdo-while).
Perbedaan ini krusial di for karena update tetap dieksekusi—namun di while, kita harus memastikan sendiri bahwa update variabel counter tetap terjadi sebelum continue, kalau tidak loop berjalan tanpa henti.
Melewatkan Iterasi Tertentu #
Contoh paling sederhana adalah mencetak hanya bilangan ganjil dari 1 sampai 10. Kita mengiterasi semua angka, dan continue melewatkan iterasi saat angka genap:
#include <stdio.h>
int main(void) {
printf("Bilangan ganjil 1..10:\n");
for (int i = 1; i <= 10; i = i + 1) {
if (i % 2 == 0) {
continue; /* Lewati bilangan genap */
}
printf("%d ", i);
}
printf("\n");
return 0;
}Output yang Dihasilkan:
Bilangan ganjil 1..10:
1 3 5 7 9 Mari kita telaah baris-baris kode di atas:
- Baris 5 (
for (int i = 1; i <= 10; i = i + 1)): loop mengiterasiidari1sampai10. - Baris 6 (
if (i % 2 == 0)): memeriksa apakahihabis dibagi2(yaitu genap). Operator modulo%menghasilkan sisa pembagian. - Baris 7 (
continue;): jika kondisi terpenuhi, kontrol melompat ke ekspresii = i + 1di headerfor. Statementprintfdi baris berikutnya tidak dieksekusi untuk iterasi saat ini. - Baris 9 (
printf("%d ", i);): hanya dieksekusi untukiganjil, mencetak angka ganjil yang lolos seleksi.
Memfilter Elemen Array #
Pola yang sering dijumpai di kode nyata adalah memfilter elemen array. Kita mengiterasi seluruh elemen, dan continue melewatkan elemen yang tidak memenuhi kriteria tanpa menghentikan loop:
#include <stdio.h>
int main(void) {
int data[] = {15, -3, 22, 0, 8, -7, 19, 0, 4};
int n = sizeof(data) / sizeof(data[0]);
int total = 0;
int dihitung = 0;
for (int i = 0; i < n; i = i + 1) {
if (data[i] <= 0) {
printf(" lewati indeks %d (nilai %d)\n", i, data[i]);
continue;
}
total = total + data[i];
dihitung = dihitung + 1;
printf(" hitung indeks %d (nilai %d)\n", i, data[i]);
}
printf("Total: %d dari %d elemen valid\n", total, dihitung);
return 0;
}Output yang Dihasilkan:
hitung indeks 0 (nilai 15)
lewati indeks 1 (nilai -3)
hitung indeks 2 (nilai 22)
lewati indeks 3 (nilai 0)
hitung indeks 4 (nilai 8)
lewati indeks 5 (nilai -7)
hitung indeks 6 (nilai 19)
lewati indeks 7 (nilai 0)
hitung indeks 8 (nilai 4)
Total: 68 dari 5 elemen validPada contoh di atas, elemen dengan nilai <= 0 dilewati, dan hanya elemen positif yang dijumlahkan ke total. Lima elemen valid (15, 22, 8, 19, 4) menghasilkan total 68. Tanpa continue, kita harus membungkus seluruh body loop di dalam blok if yang membuat kode lebih dalam dan kurang lurus.
Jebakan continue di while #
Di while, continue melompat langsung ke evaluasi kondisi—tidak ada ekspresi update otomatis seperti di for. Akibatnya, jika kita menempatkan increment counter setelah continue, increment tersebut tidak akan dieksekusi, dan loop bisa berjalan tanpa henti. Solusinya adalah menempatkan update sebelum continue:
#include <stdio.h>
int main(void) {
int i = 0;
/* continue di while loop: increment HARUS dieksekusi sebelum continue */
while (i < 10) {
i = i + 1;
if (i % 3 == 0) {
continue;
}
printf("i = %d\n", i);
}
return 0;
}Output yang Dihasilkan:
i = 1
i = 2
i = 4
i = 5
i = 7
i = 8
i = 10Pada contoh di atas, i = i + 1 ditempatkan sebelum continue, sehingga increment selalu terjadi dan loop tetap berjalan normal. Nilai-nilai kelipatan 3 (3, 6, 9) tidak dicetak karena continue melewati printf. Loop berhenti ketika i = 10 dan i < 10 menjadi false—tetapi karena increment terjadi sebelum pengecekan i % 3 == 0, nilai i = 10 sempat dicetak.
Kapan Memakai continue #
Pakai continue ketika kondisi pengecualian jauh lebih sederhana diekspresikan daripada kondisi utama. Contohnya: jika kita ingin memproses hanya elemen positif, lebih ringkas menulis if (data[i] <= 0) continue; daripada membungkus seluruh body di dalam if (data[i] > 0) { ... }. Aturan praktis: jika body utama lebih dari 5-7 baris, continue di awal lebih mudah dibaca; jika body hanya 1-2 baris, if biasa lebih jelas.