Menu

Do While Loop di C: Sintaks, Contoh, dan Kapan Memakainya

Loop C yang menjalankan body lebih dulu: bagaimana do-while menjamin satu putaran sebelum pengujian, kenapa diakhiri titik koma, pola menu dan percobaan ulang yang menjadi tujuannya, dan bedanya dengan while loop biasa.

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

Loop yang Selalu Berjalan Sekali

Loop while menguji sebelum bertindak, jadi bisa berjalan nol kali. Biasanya itu benar. Kadang justru salah: kamu tidak bisa tahu perlu mengulang sebuah prompt atau tidak sebelum menampilkannya, dan kamu tidak bisa menilai input pengguna sebelum membacanya. do-while memindahkan pengujiannya ke akhir, jadi body dijalankan lebih dulu dan kondisinya hanya menentukan apakah perlu dijalankan lagi.

Kondisi i < 5 bernilai false sejak awal. Loop while berjalan nol kali; do-while berjalan tepat sekali. Itulah seluruh perbedaan di antara keduanya.

Sintaks, dan Titik Koma Itu

do {
    // body - always runs at least once
} while (condition);

Urutannya terbaca sesuai cara eksekusinya: lakukan body, selama kondisinya masih terpenuhi, lakukan lagi.

Titik koma setelah kurung tutup itu wajib. do ... while (cond); adalah satu pernyataan, dan pernyataan C diakhiri titik koma. Kalau terlupa, compiler terus membaca lalu melaporkan error sintaks di suatu tempat di bawahnya. Karena itulah kesalahan sebenarnya sering berjarak beberapa baris dari baris yang ditunjuk error.

Ini juga satu-satunya tempat di C di mana while (cond); dengan titik koma itu benar, bukan bug. Di loop while biasa, tanda baca yang sama membuat body kosong dan biasanya loop tanpa akhir; di sini tanda baca itu menutup do.

Kurung kurawal boleh tidak ditulis kalau body-nya hanya satu pernyataan, tetapi seperti semua struktur kontrol C lainnya, tetap tuliskan saja.

Pola Validasi Input

Untuk inilah do-while dirancang. Kamu harus membaca sesuatu sebelum bisa tahu apakah itu bisa diterima, jadi pembacaan harus terjadi sebelum pengujian:

Loop terus membaca sampai sebuah nilai lolos, dan kondisi yang menolak nilai buruk adalah kondisi yang sama yang meminta putaran berikutnya. Kalau ditulis sebagai while, pembacaannya harus muncul dua kali: sekali sebelum loop untuk menyiapkan kondisi, sekali di akhir body. Duplikasi itulah yang dihilangkan do-while.

Dengan input sungguhan, body-nya akan memanggil scanf:

int age;
do {
    printf("Enter your age (1-120): ");
    if (scanf("%d", &age) != 1) {
        while (getchar() != '\n') { }   /* discard the bad line */
        age = -1;                        /* force another pass */
    }
} while (age < 1 || age > 120);

Perhatikan while di dalamnya yang membuang sisa baris. Kalau scanf gagal mengonversi, teks penyebabnya masih ada di buffer input dan setiap pembacaan berikutnya juga gagal karenanya: loop yang berputar selamanya sambil mencetak prompt. Membersihkannya adalah bagian dari pola ini.

Pola Menu

Pemakaian klasik lainnya: tampilkan pilihan, baca pilihan pengguna, jalankan, lalu ulangi sampai pengguna keluar. Menu harus muncul sebelum ada pilihan yang bisa diuji.

break di dalam switch mengakhiri switch, bukan loop-nya. Ini layak dipahami dengan tepat, karena keduanya memakai kata kunci yang sama. Di sini loop berakhir karena choice != 4 menjadi false. Kalau kamu memang ingin keluar dari loop dari dalam switch, caranya adalah return atau variabel flag; break saja tidak bisa.

Putaran Pertama yang Terjamin Bisa Jadi Bug

Karena body dijalankan sebelum pengujian apa pun, do-while dengan senang hati memproses data yang tidak ada:

/* BUG: prints a[0] even when n is 0 */
int i = 0;
do {
    printf("%d\n", a[i]);
    i++;
} while (i < n);

Dengan n == 0, kode ini membaca a[0] pada array kosong, yang merupakan undefined behavior. Setiap loop yang menelusuri kumpulan data yang mungkin kosong sebaiknya memakai while atau for, yang pengujiannya ada di depan.

Patokannya: gunakan do-while hanya kalau putaran nol kali mustahil karena sifat masalahnya, bukan sekadar jarang terjadi. Meminta input pengguna, melempar dadu sampai target muncul, menghasilkan lalu menguji sebuah kandidat: semua itu memang tidak bisa dinilai sebelum putaran pertama. Menelusuri sebuah list tidak bisa mengklaim hal yang sama.

break dan continue di do-while

Keduanya berfungsi, dan continue punya keunikan yang perlu diketahui: ia melompat ke pengujian kondisi, bukan ke awal body.

i++ di awal body dijalankan di setiap putaran, termasuk putaran yang dipotong oleh continue, jadi loop tetap maju. Taruh update setelah continue dan loop akan macet, jebakan yang sama dengan loop while.

break langsung keluar dari loop dan sama sekali melewatkan kondisinya.

Memilih di Antara Tiga Loop

Ketiga loop di C sama kuatnya; pilihannya soal mana yang paling jelas menyatakan maksud.

for        a counter, its limit, and its step belong together - "n times"
while      repeat until a condition changes, and maybe not at all - "until"
do-while   the same, but the first pass is guaranteed - "at least once"

Dalam praktiknya, do-while jauh paling jarang dipakai di antara ketiganya. Sebagian besar loop entah menghitung atau perlu menangani kasus kosong, dan keduanya membutuhkan pengujian di depan. Gunakan do-while saat kamu mendapati dirimu menduplikasi sebuah pernyataan tepat sebelum loop while demi menyiapkan kondisinya: duplikasi itulah tandanya.

Pertanyaan yang sering diajukan

Bagaimana cara menulis do-while loop di C?

do { body } while (condition);: body-nya di depan, pengujiannya di belakang, dan seluruh pernyataan diakhiri titik koma. Body selalu dijalankan setidaknya sekali, lalu diulang selama kondisinya bukan nol.

Apa perbedaan while dan do-while di C?

Letak pengujiannya. Loop while memeriksa kondisi sebelum putaran pertama, jadi bisa berjalan nol kali. do-while memeriksa sesudahnya, jadi selalu berjalan setidaknya sekali. Pilih do-while hanya kalau putaran pertama yang terjamin itu memang benar-benar dibutuhkan masalahnya.

Kenapa do-while loop butuh titik koma di akhir?

Karena do ... while (cond); adalah satu pernyataan, dan seperti setiap pernyataan C lainnya, diakhiri titik koma. Melupakannya menghasilkan error sintaks yang membingungkan dan menunjuk ke baris berikutnya, karena compiler terus membaca untuk mencari sisa pernyataan itu.

Kapan sebaiknya memakai do-while loop?

Saat body harus dijalankan sebelum kamu bisa tahu apakah perlu diulang: menampilkan menu sebelum membaca pilihan, meminta ulang sampai input valid, atau menghasilkan sebuah nilai lalu mengujinya. Kalau kondisinya bisa diperiksa di awal, while loop menyatakannya dengan lebih lugas.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai