while menguji kondisi SEBELUM menjalankan badan, sehingga badan bisa saja tidak pernah berjalan. Tetapi ada kelompok tugas yang kebalikannya: aksinya wajib dijalankan minimal satu kali, baru layak diuji. Menampilkan menu lalu membaca pilihan pengguna — Anda tidak bisa menilai pilihan sebelum menu tampil dan pengguna menjawab. Meminta angka lalu memeriksa rentangnya — permintaan pertama tidak bisa ditunda. Untuk pola “lakukan dulu, uji kemudian” inilah C++ menyediakan do-while, satu-satunya loop post-test di antara loop yang kita pelajari. Pada Chapter ini kita membedah perilakunya, membangun dua penggunaan klasiknya — validasi input dan program menu — lalu merangkum perbedaannya dengan while.

Post-Test: Badan Minimal Sekali #

Struktur do-while dibalik dibanding while: kata kunci do membuka badan, dan kondisi baru muncul di akhir setelah while. Alurnya: jalankan badan → evaluasi kondisi → bila true, kembali ke badan; bila false, lanjut ke baris sesudahnya. Karena pemeriksaan berada di belakang, badan PASTI berjalan sekali, bahkan bila kondisi sejak awal sudah false. Perhatikan pula titik koma setelah while (kondisi) — wajib, dan sering terlupa karena while biasa tidak memakainya. Sintaks lengkapnya tersaji di cppreference .

Validasi Input: Ulangi Sampai Sah #

Penggunaan pertama yang paling praktis: memaksa pengguna memberi data yang sah. Kita meminta umur dalam rentang 1 sampai 120; bila jawabannya di luar rentang, program mengumumkan kesalahan lalu bertanya lagi — persis pola yang tidak bisa ditulis rapi dengan while biasa:

cpp
#include <iostream>

int main() {
    int umur;

    do {
        std::cout << "Masukkan umur (1-120): ";
        std::cin >> umur;

        if (umur < 1 || umur > 120) {
            std::cout << "Nilai di luar rentang, coba lagi\n";
        }
    } while (umur < 1 || umur > 120);

    std::cout << "Umur terdaftar: " << umur << " tahun\n";
    return 0;
}

Output yang Dihasilkan:

text
Masukkan umur (1-120): Nilai di luar rentang, coba lagi
Masukkan umur (1-120): Umur terdaftar: 25 tahun

Mari kita telusuri alurnya:

  1. Baris 7-9: badan berjalan LANGSUNG tanpa ujian awal — menu prompt tampil, input pertama 150 dibaca.
  2. Baris 11-13 (if di dalam badan): 150 melanggar rentang, sehingga pesan “Nilai di luar rentang” tercetak. Operator logika || sudah kita kenal pada Chapter Operator Logika: cukup satu sisi benar agar keseluruhan bernilai true.
  3. Baris 14 (while (umur < 1 || umur > 120)): kondisi diperiksa untuk pertama kalinya di sini — di AKHIR. Hasilnya true, sehingga badan diulang.
  4. Putaran kedua: prompt tampil lagi, 25 dibaca, kali ini pesan galat dilewati karena if gagal, dan kondisi akhir bernilai false — loop berakhir.
  5. Baris 16: nilai umur kini dijamin berada dalam rentang, sehingga baris pendaftaran aman dijalankan tanpa pemeriksaan tambahan.

Dengan while biasa, pola ini memaksa kita menduplikasi kode: permintaan input harus ditulis dua kali (sekali sebelum loop, sekali di dalam badan). do-while menghapus duplikasi itu karena ujian dijalankan sesudah aksi pertama.

Program Menu: Pola Klasik do-while #

Penggunaan kedua adalah jantung banyak program command-line: tampilkan menu, baca pilihan, kerjakan, ulangi sampai pengguna memilih keluar. Program berikut menggabungkan do-while dengan switch dari Chapter switch:

cpp
#include <iostream>

int main() {
    int pilihan;

    do {
        std::cout << "=== MENU KALKULATOR ===\n";
        std::cout << "1. Tambah\n";
        std::cout << "2. Kali\n";
        std::cout << "0. Keluar\n";
        std::cout << "Pilihan Anda: ";
        std::cin >> pilihan;

        switch (pilihan) {
            case 1:
                std::cout << "Mode penjumlahan dipilih\n";
                break;
            case 2:
                std::cout << "Mode perkalian dipilih\n";
                break;
            case 0:
                std::cout << "Terima kasih\n";
                break;
            default:
                std::cout << "Pilihan tidak dikenal\n";
                break;
        }

        std::cout << "\n";   // pemisah antar tampilan menu
    } while (pilihan != 0);

    return 0;
}

Output yang Dihasilkan:

text
=== MENU KALKULATOR ===
1. Tambah
2. Kali
0. Keluar
Pilihan Anda: Mode penjumlahan dipilih

=== MENU KALKULATOR ===
1. Tambah
2. Kali
0. Keluar
Pilihan Anda: Pilihan tidak dikenal

=== MENU KALKULATOR ===
1. Tambah
2. Kali
0. Keluar
Pilihan Anda: Mode perkalian dipilih

=== MENU KALKULATOR ===
1. Tambah
2. Kali
0. Keluar
Pilihan Anda: Terima kasih

Dua hal menonjol dari jejak eksekusi di atas. Pertama, menu tampil empat kali — tiga kali untuk pilihan aktif dan satu kali terakhir yang ditampilkan SEBELUM kita tahu pengguna ingin keluar; itulah sifat post-test, dan pada menu justru itulah yang diinginkan. Kedua, pilihan 9 yang tidak dikenal tidak menghentikan program: switch meneruskannya ke default, dan do-while menampilkan menu lagi. Baris std::cout << "\n"; di akhir badan berjalan setiap putaran sehingga antar-tampilan menu terpisah baris kosong rapi.

do-while versus while: Kapan Memakai yang Mana #

Perbedaan keduanya tunggal tetapi konsekuensinya besar — letak ujian:

  • while (pre-test): kondisi diuji sebelum badan; badan mungkin tidak pernah dijalankan. Cocok bila aksi boleh dilewati, misalnya mengulang selama stok masih ada.
  • do-while (post-test): kondisi diuji sesudah badan; badan pasti berjalan sekali. Cocok bila aksi pertama wajib, misalnya menampilkan menu, meminta input, atau menjalankan satu langkah sebelum ujian berikutnya.

Sejarah panjang C++ juga menyimpan catatan gaya: do-while jauh lebih jarang muncul di kode modern dibanding while dan for. Kebanyakan kebutuhannya kini dilayani pola while (true) dengan break di titik keluar, karena bentuk itu menampung lebih dari satu syarat keluar. Tetapi untuk menu dan validasi input sederhana seperti di atas, do-while tetap pilihan paling lugas — maksud “ulangi minimal sekali” terbaca langsung dari strukturnya.

Sekarang kita sudah punya tiga loop — for, while, do-while — yang semuanya menghitung dengan counter atau menguji kondisi. Untuk mengunjungi setiap elemen sebuah koleksi (daftar nilai, karakter dalam teks), C++ menyediakan bentuk loop khusus yang lebih aman dan lebih ringkas: range-based for, topik Chapter berikutnya.