Loop yang kita tulis sejauh ini selalu berjalan sampai kondisinya habis — sepuluh putaran, sampai sentinel, sampai menu dipilih keluar. Kenyataannya, sering kali putaran yang tersisa sudah tidak berguna: data yang dicari ketemu di putaran ketiga, mengapa masih menyaring putaran ke seratus? Untuk kendali halus semacam ini C++ menyediakan dua kata kunci: break yang menghentikan loop seketika, dan continue yang membatalkan sisa badan putaran ini lalu melompat ke putaran berikutnya. Kita sudah bersentuhan dengan break pada Chapter switch; kini kita melihatnya di habitat aslinya, bersama pasangannya.
break: Keluar dari Loop Terdekat #
break menghentikan loop yang melingkupinya SEKETIKA — eksekusi melompat ke pernyataan pertama sesudah loop, dan seluruh sisa putaran dibatalkan tanpa dibicarakan. Karena ia selalu menunjuk ke loop TERDEKAT, kebiasaan membacanya aman: tidak perlu mencari jauh, pasangannya pasti di loop yang sama. Contoh berikut mencari kuadrat pertama yang melewati 30:
#include <iostream>
int main() {
for (int i = 1; i <= 10; ++i) {
if (i * i > 30) {
std::cout << "Kuadrat pertama di atas 30: " << i * i << "\n";
break; // keluar dari loop, sisa putaran dibatalkan
}
std::cout << "i = " << i << ", kuadrat = " << i * i << "\n";
}
std::cout << "Loop selesai\n";
return 0;
}Output yang Dihasilkan:
i = 1, kuadrat = 1
i = 2, kuadrat = 4
i = 3, kuadrat = 9
i = 4, kuadrat = 16
i = 5, kuadrat = 25
Kuadrat pertama di atas 30: 36
Loop selesaiPutaran berjalan normal untuk i = 1 sampai 5, masing-masing mencetak baris laporan. Pada i = 6, kondisi i * i > 30 akhirnya benar (36 > 30), sehingga program mencetak jawabannya lalu break mengakhiri loop — putaran i = 7 sampai 10 tidak pernah terjadi. Baris “Loop selesai” membuktikan eksekusi bersih: break menghentikan loop, bukan program; pernyataan sesudah loop tetap dijalankan. Pola “cari sampai ketemu lalu berhenti” seperti ini adalah pemakaian paling wajar break, karena tanpa itu kita terpaksa menambah syarat rumit ke kondisi loop (i <= 10 && i * i <= 30) untuk hasil yang sama.
continue: Lewati Putaran Ini Saja #
continue lebih lembut: ia membatalkan sisa badan pada putaran BERJALAN, lalu langsung melompat ke langkah berikutnya sesuai jenis loop — pada for, lompatan menuju klausa iterasi (++i) lalu pemeriksaan kondisi; pada while, lompatan langsung ke pemeriksaan kondisi. Putaran yang di-continue tidak dihentikan loopnya; hanya sisa pekerjaannya yang dilewati:
#include <iostream>
int main() {
for (int i = 1; i <= 10; ++i) {
if (i % 2 == 0) {
continue; // lewati angka genap, langsung ke putaran berikutnya
}
std::cout << "Angka ganjil: " << i << "\n";
}
return 0;
}Output yang Dihasilkan:
Angka ganjil: 1
Angka ganjil: 3
Angka ganjil: 5
Angka ganjil: 7
Angka ganjil: 9Setiap kali i genap, continue menyabotase sisa badan — baris cout tidak tercapai — dan mengembalikan kontrol ke klausa iterasi. Angka genap 2, 4, 6, 8, 10 tidak pernah tercetak, sedangkan loop tetap berjalan penuh sepuluh kali. Pemakaian wajar continue adalah menyaring kasus khusus di awal badan, sehingga logika utama tidak perlu bersarang di dalam if besar: “bila tidak relevan, lewati; selain itu, kerjakan”.
Kejutan continue pada while #
Pada for, lompatan continue tetap melewati klausa iterasi sehingga counter selalu maju. Pada while TIDAK ada klausa iterasi — continue melompat langsung ke kondisi. Bila baris yang menggerakkan loop berada SETELAH continue, baris itu tidak pernah tercapai dan loop membeku selamanya:
int i = 0;
while (i < 10) {
if (i % 2 == 0) {
continue; // i tidak pernah naik — program berputar tanpa akhir
}
++i;
}Saat i = 0, kondisi i % 2 == 0 benar dan continue melompat kembali ke pemeriksaan i < 10 — tanpa sempat menyentuh ++i. Nilai i tetap 0, kondisi genap tetap benar, dan siklus itu berulang tanpa akhir. Versi yang benar menaikkan counter SEBELUM titik lompatan:
#include <iostream>
int main() {
int i = 0;
while (i < 10) {
++i; // naikkan counter SEBELUM continue agar loop tetap maju
if (i % 2 == 0) {
continue;
}
std::cout << "Ganjil: " << i << "\n";
}
return 0;
}Output yang Dihasilkan:
Ganjil: 1
Ganjil: 3
Ganjil: 5
Ganjil: 7
Ganjil: 9Sekarang ++i di baris 8 berjalan setiap putaran sebelum uji genap, sehingga continue hanya melewatkan pencetakan, bukan kemajuan loop. Referensi kedua kata kunci ini tersedia di cppreference untuk break
dan untuk continue
.
Satu catatan penghubung ke belakang: break hanya mampu keluar dari loop yang paling dalam tempat ia berada. Bila kita bekerja dengan loop di dalam loop — tabel, matriks, kombinasi dua dimensi — keluar dari semuanya butuh strategi tambahan. Chapter Nested Loop membahas persis situasi itu.