Cara Menggunakan Switch Case dalam Bahasa C

Meja kerja programmer dengan laptop menampilkan editor kode dan catatan diagram alur percabangan

Switch case di bahasa C memilih satu blok kode berdasarkan nilai sebuah ekspresi, dan biasanya dipakai saat kamu punya banyak pilihan yang semuanya membandingkan variabel yang sama. Kalau kamu pernah menulis rantai if-else if sepanjang setengah layar hanya untuk menangani pilihan menu, switch case adalah pengganti yang lebih mudah dibaca.

Bentuk dasar switch case

Struktur switch terdiri dari ekspresi pembanding, sejumlah case berisi nilai, dan satu default sebagai penampung terakhir. Perhatikan contoh berikut.

#include <stdio.h>

int main(void) {
    int pilihan = 2;

    switch (pilihan) {
        case 1:
            printf("Kopi hitamn");
            break;
        case 2:
            printf("Teh manisn");
            break;
        case 3:
            printf("Jus jerukn");
            break;
        default:
            printf("Menu tidak tersedian");
    }

    return 0;
}

Program di atas mencetak Teh manis karena nilai pilihan cocok dengan case 2. Setelah printf dijalankan, break menghentikan switch sehingga eksekusi melompat ke baris setelah kurung kurawal penutup.

Kenapa break penting

Tanpa break, eksekusi tidak berhenti di case yang cocok. Program akan terus masuk ke case berikutnya sampai menemukan break atau mencapai akhir switch. Perilaku ini disebut fall-through, dan sering jadi sumber bug yang sulit dilacak karena hasilnya tidak sesuai harapan.

Coba hapus break pada case 2 di contoh sebelumnya. Outputnya berubah menjadi dua baris, yaitu Teh manis lalu Jus jeruk. Compiler tidak akan memperingatkanmu soal ini, jadi kesalahan seperti itu harus kamu sadari sendiri saat membaca ulang kode.

Fall-through kadang dimanfaatkan dengan sengaja, misalnya saat beberapa case menjalankan aksi yang sama.

switch (huruf) {
    case 'a':
    case 'i':
    case 'u':
    case 'e':
    case 'o':
        printf("Huruf vokaln");
        break;
    default:
        printf("Huruf konsonann");
}

Case kosong berderet seperti itu tetap jelas maksudnya. Yang berbahaya adalah fall-through yang tidak disengaja pada case berisi kode.

Aturan nilai case yang perlu kamu tahu

Ekspresi di dalam switch harus bertipe integer, yaitu int, char, short, long, atau enum. Tipe float, double, dan string tidak bisa dipakai. Kalau kamu perlu membandingkan teks, gunakan strcmp bersama if-else, bukan switch.

Setiap nilai case harus berupa konstanta yang diketahui saat kompilasi. Kamu tidak bisa menulis case variabel: karena compiler perlu memastikan semua nilai case unik dan bisa dihitung sebelum program berjalan. Dua case dengan nilai sama juga akan ditolak compiler.

Urutan case tidak memengaruhi hasil, tapi menulisnya menaik membuat kode lebih mudah dipindai mata. Untuk rentang nilai yang lebar, misalnya 1 sampai 100, switch bukan pilihan tepat karena kamu harus menulis seratus case. Di situ, if-else dengan operator perbandingan lebih masuk akal.

Switch di dalam loop

Switch sering dipasangkan dengan loop untuk membuat menu yang bisa dipilih berulang kali. Pola ini umum di program latihan berbasis terminal.

int pilihan = 0;

while (pilihan != 4) {
    printf("1. Lihat datan2. Tambah datan3. Hapus datan4. Keluarn");
    printf("Pilih: ");
    scanf("%d", &pilihan);

    switch (pilihan) {
        case 1:
            printf("Menampilkan data...n");
            break;
        case 2:
            printf("Menambah data...n");
            break;
        case 3:
            printf("Menghapus data...n");
            break;
        case 4:
            printf("Sampai jumpa.n");
            break;
        default:
            printf("Pilihan tidak valid.n");
    }
}

Kalau kamu baru mulai memakai loop, ada baiknya membaca cara menggunakan while loop dalam bahasa C untuk pemula supaya alur pengulangannya lebih jelas. Perhatikan juga bahwa break di dalam switch hanya keluar dari switch, bukan dari while. Untuk menghentikan loop, kode di atas mengandalkan kondisi pilihan != 4.

Kesalahan yang sering terjadi

  • Lupa menulis break sehingga dua case ikut dieksekusi.
  • Memakai tanda titik koma setelah case 1:. Tanda titik dua adalah bagian dari sintaks, dan titik dua yang tertukar dengan titik koma akan membuat program gagal dikompilasi.
  • Mendeklarasikan variabel di dalam case tanpa kurung kurawal, padahal variabel itu dipakai di case lain.
  • Membandingkan string dengan switch, yang memang tidak didukung C.
  • Membiarkan default kosong padahal input pengguna bisa saja di luar dugaan.

Daftar kesalahan di atas masih bagian kecil dari masalah yang biasa muncul saat belajar C. Kalau ingin menghindari lebih banyak jebakan, lihat 8 kesalahan umum saat menulis kode C dan cara menghindarinya.

Kapan sebaiknya pakai switch, kapan pakai if-else

Pakai switch ketika semua cabang membandingkan satu variabel yang sama dengan nilai-nilai tetap, jumlah pilihannya jelas, dan tipe datanya integer atau karakter. Contoh nyatanya adalah menu program, pemetaan kode status, atau penerjemah kode perintah.

Pakai if-else ketika kondisinya berupa rentang, gabungan beberapa variabel, atau perbandingan yang melibatkan fungsi seperti strcmp. Menulis if-else untuk sepuluh pilihan yang membandingkan satu integer sah-sah saja, tetapi switch membuat pembaca langsung paham bahwa ini adalah pemilihan berdasarkan satu nilai.

Kebiasaan kecil seperti konsisten memilih bentuk percabangan ikut menentukan seberapa rapi kode akhirnya. Prinsip serupa berlaku di bahasa lain, misalnya pada kebiasaan ngoding Ruby on Rails yang bikin kode rapi, di mana struktur yang konsisten lebih mudah dirawat daripada trik yang menghemat beberapa baris.

Membaca input dengan aman sebelum switch

Masalah yang sering muncul bukan di switch-nya, melainkan pada nilai yang masuk. Fungsi scanf dengan format %d akan gagal membaca jika pengguna mengetik huruf, dan nilai variabel bisa tertinggal dari input sebelumnya. Periksa hasil scanf sebelum masuk ke switch.

if (scanf("%d", &pilihan) != 1) {
    printf("Input harus angka.n");
    while (getchar() != 'n');  /* buang sisa input */
    continue;
}

Setelah input dipastikan berupa angka, switch baru boleh dijalankan. Menambahkan pemeriksaan ini terasa merepotkan di awal, tapi mencegah program berputar-putar tanpa henti ketika pengguna salah ketik.

Untuk memastikan kode switch-mu benar-benar berjalan sesuai harapan, biasakan membaca peringatan compiler dan menyalakan opsi -Wall di GCC atau Clang. Beberapa compiler memberi peringatan saat menemukan case yang tidak pernah tercapai atau fall-through yang mencurigakan. Panduan memilih compiler C: GCC, Clang, dan MSVC bisa membantumu mengatur opsi tersebut di tiap platform.

Ringkasan

Switch case adalah percabangan yang membaca satu ekspresi integer dan menjalankan blok sesuai nilai case yang cocok. Pastikan setiap case yang berisi kode diakhiri break, gunakan hanya tipe integer atau karakter, dan sediakan default untuk nilai di luar dugaan. Untuk kondisi berupa rentang atau perbandingan teks, if-else tetap jadi pilihan yang lebih tepat.

Pertanyaan yang Sering Diajukan

Apakah switch case harus punya blok default?

Tidak wajib secara sintaks, tetapi sangat disarankan. Tanpa default, nilai yang tidak cocok dengan case mana pun akan membuat program diam saja, dan gejalanya lebih sulit dilacak saat ada bug.

Bisakah switch case membandingkan string di bahasa C?

Tidak bisa. Switch hanya menerima tipe integer dan karakter. Untuk membandingkan string, pakai fungsi strcmp di dalam rantai if-else atau bandingkan hasilnya satu per satu.

Apakah break di dalam switch ikut menghentikan loop?

Tidak. break hanya menghentikan switch tempat ia berada. Kalau switch ada di dalam loop, eksekusi akan lanjut ke iterasi berikutnya. Untuk keluar dari loop, gunakan kondisi loop atau pernyataan break di luar switch.