Menu

For Loop C++: Sintaks, Contoh, dan Kesalahan Umum

Cara mengulang kode dengan for loop C++: header tiga bagian, menghitung naik dan turun, perulangan pada array, loop bersarang, break dan continue, serta bug off-by-one dan unsigned yang menjebak semua orang.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Kenapa for Loop

switch memilih satu cabang untuk dijalankan sekali. Namun program sungguhan perlu melakukan sesuatu berulang kali: mencetak setiap skor, menjumlahkan daftar angka, menggambar 10 baris grid. for loop adalah andalan C++ untuk mengulang kode sebanyak jumlah yang sudah diketahui, dengan penghitung bawaan yang kamu kendalikan.

Semua yang dibutuhkan for loop ada di satu header yang ringkas, jadi seluruh cerita "berapa kali dan bagaimana" langsung terlihat sekilas.

Header Tiga Bagian

Header for loop punya tiga bagian yang dipisahkan titik koma: inisialisasi, kondisi, dan update.

for (initializer; condition; update) {
    // body - runs while condition is true
}

Ketiganya dijalankan dengan urutan tertentu: inisialisasi berjalan sekali di awal; lalu kondisi dicek sebelum setiap iterasi; isi loop hanya berjalan kalau kondisinya true; dan update berjalan di akhir setiap iterasi, tepat sebelum kondisi dicek lagi.

Di sini int i = 0 berjalan sekali. Lalu i < 5 dicek: selama kondisi itu terpenuhi, isi loop mencetak dan i++ menaikkan penghitungnya. Saat i mencapai 5, kondisinya false, jadi loop selesai dan done dicetak. Isi loop berjalan tepat 5 kali, dengan i bernilai 0 sampai 4.

Mendeklarasikan penghitung di dalam header (int i = 0) membuat scope i terbatas pada loop. Ia tidak ada lagi setelah kurung kurawal penutup, dan memang itulah yang kamu inginkan.

Menghitung Naik, Turun, dan dengan Langkah Tertentu

Bagian update tidak terbatas pada i++. Kamu bisa menghitung mundur, melangkah sebanyak berapa pun, atau melakukan perulangan pada indeks array.

Loop pertama berjalan selama i > 0, berkurang setiap kali, jadi ia mencetak 5 4 3 2 1. Loop kedua menambahkan 2 di setiap putaran dan memakai <= 10 karena 10 adalah nilai yang ingin kita sertakan. Sesuaikan kondisi dengan update-nya: menghitung mundur berpasangan dengan > atau >=, menghitung naik dengan < atau <=.

Perulangan pada Array

Pemakaian loop penghitung yang paling umum adalah menelusuri array berdasarkan indeks. Penghitungnya sekaligus menjadi posisi yang kamu baca.

Perhatikan kondisinya adalah i < n, bukan i <= n. Array berisi 5 elemen punya indeks valid 0 sampai 4; indeks 5 sudah melewati ujungnya. Membaca scores[5] adalah undefined behavior: bisa mencetak sampah, crash, atau terlihat berfungsi sambil diam-diam merusak memori. Pola i < n adalah default yang aman untuk array apa pun yang indeksnya dimulai dari nol.

Kalau kamu hanya butuh nilainya dan bukan indeksnya, range-based for lebih rapi. Pakai loop berindeks yang klasik saat kamu memang butuh posisinya.

break dan continue

Dua kata kunci membuatmu bisa mengubah alur di tengah loop. break langsung keluar dari loop; continue melewati sisa iterasi saat ini dan melompat ke update.

Loop pertama berhenti begitu menemukan 7 dan tidak pernah mengecek sisanya. Loop kedua memakai continue untuk melewati pencetakan setiap kali i genap; update i++ tetap berjalan, jadi loop terus maju. Jebakan halusnya: continue melompat ke update, jadi kalau kamu memakai continue di dalam loop yang penghitungnya di-update di dalam isi loop alih-alih di header, kamu bisa tidak sengaja melewati update itu dan loop berputar selamanya.

Loop Bersarang

Taruh satu for di dalam loop lain untuk bekerja dengan grid, tabel, atau pasangan. Loop dalam berjalan sampai selesai untuk setiap satu langkah loop luar.

Program ini mencetak grid perkalian 3x3. Loop luar menetapkan satu row, loop dalam menyapu setiap col untuk baris itu, lalu baris baru mengakhiri baris tersebut. Beri penghitung nama yang berbeda (row/col, bukan i/i): memakai ulang satu nama akan menutupi penghitung luar dan menghasilkan bug yang membingungkan. Perhatikan juga biayanya: menaruh loop n di dalam loop n menjalankan isinya n * n kali, yang cepat membengkak.

Jebakan Umum

Beberapa jebakan menjadi penyebab sebagian besar bug for loop di C++:

  • Off-by-one: i <= n dengan ukuran yang dimulai dari nol membaca satu elemen melewati ujungnya. Pakai i < n.
  • Underflow unsigned: menghitung mundur dengan tipe unsigned tidak pernah menjadi negatif. for (size_t i = n - 1; i >= 0; i--) berputar selamanya, karena i >= 0 selalu benar untuk nilai unsigned: saat i bernilai 0, i-- berputar balik menjadi bilangan positif yang sangat besar. Pakai int yang signed untuk hitungan mundur, atau tulis ulang kondisinya.
  • Mengubah penghitung di dalam isi loop: mengubah i di isi loop sekaligus di header membuat jumlah perulangan tidak bisa ditebak. Pilih satu tempat saja.
// BUG: infinite loop - unsigned i is never < 0
for (size_t i = n - 1; i >= 0; i--) {
    process(arr[i]);
}

Penghitung floating-point adalah bahaya diam-diam lainnya: for (double x = 0.0; x != 1.0; x += 0.1) mungkin tidak pernah tepat mengenai 1.0 karena 0.1 tidak bisa disimpan secara presisi. Lakukan perulangan dengan hitungan bilangan bulat dan hitung nilainya di dalam loop, atau pakai < alih-alih !=.

Berikutnya: while Loop

for loop unggul saat kamu sudah tahu jumlahnya sejak awal. Namun kadang kamu perlu mengulang sampai sebuah kondisi berubah, misalnya membaca input sampai akhir file atau mencoba lagi sampai berhasil, tanpa jumlah langkah yang tetap. Itulah tugas while loop, yang memangkas header-nya menjadi hanya sebuah kondisi. Itu topik halaman berikutnya.

Pertanyaan yang sering diajukan

Bagaimana cara menulis for loop di C++?

Tulis tiga bagian di header yang dipisahkan titik koma: inisialisasi, kondisi, dan update. for (int i = 0; i < 5; i++) { cout << i; } menjalankan isi loop dengan i bernilai 0, 1, 2, 3, 4. Loop berhenti begitu kondisinya menjadi false.

Apa perbedaan for loop dan range-based for loop di C++?

for klasik memberimu penghitung indeks yang kamu kendalikan (for (int i = 0; i < n; i++)), yang kamu butuhkan saat ingin tahu posisinya atau ingin melangkah dengan cara khusus. Range-based for (for (int x : v)) menyembunyikan indeksnya dan langsung memberimu setiap elemen, lebih rapi kalau kamu hanya butuh nilainya.

Kenapa for loop C++ milikku berjalan satu kali terlalu banyak atau terlalu sedikit?

Itu bug off-by-one yang klasik. Memakai <= alih-alih < dengan ukuran yang dimulai dari nol menjalankan satu iterasi tambahan dan membaca melewati ujung array; memakai < padahal kamu ingin menyertakan nilai terakhir membuat loop kurang satu. Untuk array berukuran n, pola yang aman adalah for (int i = 0; i < n; i++).

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai