Switch case adalah salah satu struktur kontrol yang paling penting dalam bahasa pemrograman C. Dalam artikel ini, kita akan membahas contoh program switch case pada C dengan berbagai implementasi praktis yang mudah dipahami. Switch case memberikan alternatif yang lebih efisien dibandingkan multiple if-else statement untuk menangani banyak kondisi.
Apa itu Switch Case dalam C?
Switch case adalah struktur kontrol yang memungkinkan program untuk memilih salah satu dari beberapa blok kode untuk dieksekusi berdasarkan nilai dari suatu variabel atau ekspresi. Struktur ini sangat berguna ketika kita memiliki banyak kondisi yang perlu diperiksa.
- Efisien: Lebih cepat dari multiple if-else untuk banyak kondisi
- Readable: Kode lebih mudah dibaca dan dipahami
- Terstruktur: Organisasi kode yang lebih baik dan teratur
- Maintainable: Mudah untuk maintenance dan debugging
Syntax Dasar Switch Case
📝 Struktur Syntax Switch Case:
switch (expression) {
case constant1:
// blok kode untuk constant1
break;
case constant2:
// blok kode untuk constant2
break;
case constant3:
// blok kode untuk constant3
break;
default:
// blok kode default (opsional)
break;
}
📋 Penjelasan Komponen:
- Expression: Nilai yang akan dievaluasi (harus integer atau char)
- Case: Label yang berisi konstanta untuk dibandingkan
- Break: Statement untuk keluar dari switch block
- Default: Blok yang dieksekusi jika tidak ada case yang cocok
Contoh Program 1: Menu Kalkulator Sederhana
Program kalkulator sederhana yang menggunakan switch case untuk memilih operasi matematika yang akan dilakukan.
🎯 Tujuan Pembelajaran:
- Memahami implementasi dasar switch case
- Menggunakan break statement dengan benar
- Menangani input user dengan scanf
- Implementasi default case untuk error handling
#include <stdio.h>
int main() {
float num1, num2, result;
char operator;
printf("=== KALKULATOR SEDERHANA ===\n");
printf("Masukkan angka pertama: ");
scanf("%f", &num1);
printf("Pilih operasi (+, -, *, /): ");
scanf(" %c", &operator); // Spasi sebelum %c untuk menghindari whitespace
printf("Masukkan angka kedua: ");
scanf("%f", &num2);
printf("\n=== HASIL PERHITUNGAN ===\n");
switch(operator) {
case '+':
result = num1 + num2;
printf("%.2f + %.2f = %.2f\n", num1, num2, result);
break;
case '-':
result = num1 - num2;
printf("%.2f - %.2f = %.2f\n", num1, num2, result);
break;
case '*':
result = num1 * num2;
printf("%.2f * %.2f = %.2f\n", num1, num2, result);
break;
case '/':
if(num2 != 0) {
result = num1 / num2;
printf("%.2f / %.2f = %.2f\n", num1, num2, result);
} else {
printf("Error: Pembagian dengan nol tidak diperbolehkan!\n");
}
break;
default:
printf("Error: Operator '%c' tidak valid!\n", operator);
printf("Gunakan operator: +, -, *, /\n");
break;
}
return 0;
}
Contoh Program 2: Sistem Grading Nilai
Program untuk mengkonversi nilai numerik menjadi grade huruf menggunakan switch case dengan range nilai.
🎯 Tujuan Pembelajaran:
- Menggunakan switch case dengan range nilai
- Implementasi pembagian nilai (division) untuk grouping
- Menangani multiple case dengan fall-through
- Validasi input dan error handling
#include <stdio.h>
int main() {
int nilai;
char grade;
printf("=== SISTEM PENILAIAN GRADE ===\n");
printf("Masukkan nilai (0-100): ");
scanf("%d", &nilai);
// Validasi input
if(nilai < 0 || nilai > 100) {
printf("Error: Nilai harus antara 0-100!\n");
return 1;
}
// Menggunakan pembagian untuk grouping nilai
switch(nilai / 10) {
case 10: // Nilai 100
case 9: // Nilai 90-99
grade = 'A';
printf("Nilai: %d\n", nilai);
printf("Grade: %c (Excellent - Sangat Baik)\n", grade);
printf("Keterangan: Prestasi luar biasa!\n");
break;
case 8: // Nilai 80-89
grade = 'B';
printf("Nilai: %d\n", nilai);
printf("Grade: %c (Good - Baik)\n", grade);
printf("Keterangan: Prestasi baik, pertahankan!\n");
break;
case 7: // Nilai 70-79
grade = 'C';
printf("Nilai: %d\n", nilai);
printf("Grade: %c (Average - Cukup)\n", grade);
printf("Keterangan: Cukup baik, tingkatkan lagi!\n");
break;
case 6: // Nilai 60-69
grade = 'D';
printf("Nilai: %d\n", nilai);
printf("Grade: %c (Below Average - Kurang)\n", grade);
printf("Keterangan: Perlu perbaikan, belajar lebih giat!\n");
break;
default: // Nilai 0-59
grade = 'F';
printf("Nilai: %d\n", nilai);
printf("Grade: %c (Fail - Gagal)\n", grade);
printf("Keterangan: Tidak lulus, harus mengulang!\n");
break;
}
return 0;
}
Contoh Program 3: Menu Sistem ATM
Program simulasi ATM dengan berbagai fitur menggunakan switch case dalam loop untuk menu yang berulang.
🎯 Tujuan Pembelajaran:
- Implementasi switch case dalam loop
- Menangani state management (saldo, transaksi)
- Nested switch case untuk sub-menu
- Input validation dan security features
#include <stdio.h>
int main() {
int pilihan, pin, inputPin = 1234;
float saldo = 1000000.0;
float jumlah;
int attempts = 0;
printf("=== SELAMAT DATANG DI ATM BANK ABC ===\n");
// Verifikasi PIN
do {
printf("Masukkan PIN Anda: ");
scanf("%d", &pin);
attempts++;
if(pin != inputPin) {
printf("PIN salah! Sisa percobaan: %d\n", 3 - attempts);
if(attempts >= 3) {
printf("Kartu diblokir!\n");
return 1;
}
}
} while(pin != inputPin && attempts < 3);
printf("PIN benar! Akses diterima.\n\n");
// Menu utama ATM
do {
printf("\n=== MENU UTAMA ATM ===\n");
printf("1. Cek Saldo\n");
printf("2. Tarik Tunai\n");
printf("3. Setor Tunai\n");
printf("4. Transfer\n");
printf("5. Keluar\n");
printf("Pilih menu (1-5): ");
scanf("%d", &pilihan);
switch(pilihan) {
case 1: // Cek Saldo
printf("\n=== CEK SALDO ===\n");
printf("Saldo Anda: Rp %.2f\n", saldo);
break;
case 2: // Tarik Tunai
printf("\n=== TARIK TUNAI ===\n");
printf("Saldo tersedia: Rp %.2f\n", saldo);
printf("Masukkan jumlah penarikan: Rp ");
scanf("%f", &jumlah);
if(jumlah <= 0) {
printf("Jumlah tidak valid!\n");
} else if(jumlah > saldo) {
printf("Saldo tidak mencukupi!\n");
} else {
saldo -= jumlah;
printf("Penarikan berhasil!\n");
printf("Saldo tersisa: Rp %.2f\n", saldo);
}
break;
case 3: // Setor Tunai
printf("\n=== SETOR TUNAI ===\n");
printf("Masukkan jumlah setoran: Rp ");
scanf("%f", &jumlah);
if(jumlah <= 0) {
printf("Jumlah tidak valid!\n");
} else {
saldo += jumlah;
printf("Setoran berhasil!\n");
printf("Saldo sekarang: Rp %.2f\n", saldo);
}
break;
case 4: // Transfer
printf("\n=== TRANSFER ===\n");
printf("Masukkan jumlah transfer: Rp ");
scanf("%f", &jumlah);
if(jumlah <= 0) {
printf("Jumlah tidak valid!\n");
} else if(jumlah > saldo) {
printf("Saldo tidak mencukupi!\n");
} else {
saldo -= jumlah;
printf("Transfer berhasil!\n");
printf("Saldo tersisa: Rp %.2f\n", saldo);
}
break;
case 5: // Keluar
printf("Terima kasih!\n");
return 0;
default:
printf("Pilihan tidak valid!\n");
break;
}
} while(pilihan != 5);
return 0;
}
Contoh Program 4: Game Batu Gunting Kertas
Game interaktif batu gunting kertas melawan komputer dengan sistem scoring menggunakan switch case untuk menentukan pemenang.
🎯 Tujuan Pembelajaran:
- Menggunakan switch case untuk game logic
- Implementasi random number generation
- Nested switch case untuk complex conditions
- Score tracking dan game statistics
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int pilihanPemain, pilihanKomputer;
int skorPemain = 0, skorKomputer = 0;
char lanjut;
srand(time(NULL));
printf("=== GAME BATU GUNTING KERTAS ===\n");
do {
printf("\nPilih senjata:\n");
printf("1. Batu\n");
printf("2. Gunting\n");
printf("3. Kertas\n");
printf("Pilihan (1-3): ");
scanf("%d", &pilihanPemain);
if(pilihanPemain < 1 || pilihanPemain > 3) {
printf("Pilihan tidak valid!\n");
continue;
}
pilihanKomputer = (rand() % 3) + 1;
printf("\nAnda: ");
switch(pilihanPemain) {
case 1: printf("Batu"); break;
case 2: printf("Gunting"); break;
case 3: printf("Kertas"); break;
}
printf("\nKomputer: ");
switch(pilihanKomputer) {
case 1: printf("Batu"); break;
case 2: printf("Gunting"); break;
case 3: printf("Kertas"); break;
}
// Tentukan pemenang
if(pilihanPemain == pilihanKomputer) {
printf("\nSERI!\n");
} else {
switch(pilihanPemain) {
case 1: // Batu
if(pilihanKomputer == 2) {
printf("\nANDA MENANG! Batu menghancurkan Gunting\n");
skorPemain++;
} else {
printf("\nANDA KALAH! Kertas membungkus Batu\n");
skorKomputer++;
}
break;
case 2: // Gunting
if(pilihanKomputer == 3) {
printf("\nANDA MENANG! Gunting memotong Kertas\n");
skorPemain++;
} else {
printf("\nANDA KALAH! Batu menghancurkan Gunting\n");
skorKomputer++;
}
break;
case 3: // Kertas
if(pilihanKomputer == 1) {
printf("\nANDA MENANG! Kertas membungkus Batu\n");
skorPemain++;
} else {
printf("\nANDA KALAH! Gunting memotong Kertas\n");
skorKomputer++;
}
break;
}
}
printf("Skor - Anda: %d | Komputer: %d\n", skorPemain, skorKomputer);
printf("Main lagi? (y/n): ");
scanf(" %c", &lanjut);
} while(lanjut == 'y' || lanjut == 'Y');
printf("\n=== HASIL AKHIR ===\n");
if(skorPemain > skorKomputer) {
printf("ANDA JUARA!\n");
} else if(skorKomputer > skorPemain) {
printf("KOMPUTER JUARA!\n");
} else {
printf("HASIL SERI!\n");
}
return 0;
}
Best Practices Switch Case
1. Selalu Gunakan Break Statement
switch(nilai) {
case 1:
printf("Satu");
// Missing break - akan fall through!
case 2:
printf("Dua");
break;
}
switch(nilai) {
case 1:
printf("Satu");
break; // Selalu gunakan break
case 2:
printf("Dua");
break;
}
2. Gunakan Default Case
- Selalu sediakan default case untuk menangani nilai yang tidak terduga
- Gunakan default untuk error handling dan validation
- Letakkan default case di akhir untuk konvensi
3. Validasi Input
- Selalu validasi input sebelum masuk ke switch
- Gunakan range checking untuk nilai numerik
- Handle edge cases dan invalid input
- Tidak bisa menggunakan variabel dalam case label
- Tidak mendukung range conditions (kecuali dengan trik)
- Terbatas pada integer dan character constants
- Tidak bisa menggunakan floating point numbers
🙋♂️ Frequently Asked Questions (FAQ)
Kesimpulan
Switch case adalah struktur kontrol yang sangat powerful dalam bahasa C untuk menangani multiple conditions dengan efisien. Kelima contoh program switch case pada C yang telah kita bahas mendemonstrasikan berbagai implementasi praktis dari basic calculator hingga complex game logic.
Rangkuman pembelajaran:
- Kalkulator: Implementasi dasar switch case dengan operator selection
- Grading System: Penggunaan range grouping dan fall-through behavior
- ATM System: Complex menu system dengan nested switch dan state management
- Rock Paper Scissors: Game logic dengan nested switch dan random generation
Key takeaways:
- Switch case lebih efisien untuk multiple equality checks
- Selalu gunakan break statement untuk mencegah fall-through
- Default case penting untuk error handling
- Validasi input sebelum masuk ke switch statement
- Gunakan if-else untuk complex conditions dan non-integer comparisons
Dengan memahami dan mempraktikkan contoh-contoh program ini, Anda akan dapat mengimplementasikan switch case dengan efektif dalam berbagai skenario programming. Ingatlah untuk selalu mempertimbangkan readability, maintainability, dan performance dalam memilih struktur kontrol yang tepat.
Selamat coding dan semoga sukses dalam perjalanan programming C Anda! 🚀