ความหมาย
Switch statement ใช้เลือกทำงานหนึ่งในหลายกรณี (multiple decisions) โดยเปรียบเทียบค่าของ expression กับรายการค่าคงที่ (integer หรือ character constants)
Syntax
switch (expression) {
case value1: stmt1; break;
case value2: stmt2; break;
...
default: stmt_x;
}อัลกอริทึม
Step 1: ประกาศตัวแปร
Step 2: อ่านค่า expression
Step 3: switch(expression)
ถ้า value1 -> stmt1; break;
ถ้า value2 -> stmt2; break;
...
default -> stmt_x;
Step 4: ออกจาก switchตัวอย่างที่ 1: แปลงตัวเลขเป็นคำอ่าน
#include <stdio.h>
int main() {
int n;
printf("ป้อนตัวเลข (0-1): ");
scanf("%d", &n);
switch (n) {
case 0: printf("ศูนย์\\n"); break;
case 1: printf("หนึ่ง\\n"); break;
default: printf("เลือกไม่ถูกต้อง\\n");
}
return 0;
}ผลลัพธ์
ป้อนตัวเลข (0-1): 1 หนึ่ง
ตัวอย่างที่ 2: Grade Classification
#include <stdio.h>
int main() {
char grade;
printf("ป้อนเกรดนักศึกษา: ");
scanf(" %c", &grade); // space ก่อน %c เพื่อข้าม whitespace
switch (grade) {
case 'A': printf("เกียรตินิยม\\n"); break;
case 'B': printf("ชั้น 1\\n"); break;
case 'C': printf("ชั้น 2\\n"); break;
case 'D': printf("ชั้น 3\\n"); break;
default: printf("ไม่ผ่าน\\n");
}
printf("เกรดของนักศึกษา = %c\\n", grade);
return 0;
}ผลลัพธ์ตัวอย่าง
Run 1: ป้อนเกรดนักศึกษา: A เกียรตินิยม เกรดของนักศึกษา = A Run 2: ป้อนเกรดนักศึกษา: C ชั้น 2 เกรดของนักศึกษา = C
คุณสมบัติสำคัญ
- Fall-through: หากไม่มี break จะรัน case ถัดไปต่อ (บางครั้งใช้ประโยชน์ได้)
- Default: จับ case ที่ไม่ตรงกับ case ใดๆ (optional แต่แนะนำ)
- Expression type: ต้องเป็น integer type (int, char, short, long, enum)
- Case constants: ต้องเป็น compile-time constants (ไม่ใช่ variable)
Switch vs If-Else
| คุณสมบัติ | Switch | If-Else |
|---|---|---|
| เงื่อนไข | Equality เท่านั้น | Relational, logical ทุกอย่าง |
| ประสิทธิภาพ | Jump table (O(1)) มากกว่าหลาย cases | O(n) ตรวจสอบทีละเงื่อนไข |
| Readability | ดีสำหรับหลาย discrete values | ดีสำหรับ range/complex conditions |
| Type support | Integer types only | All types |
Best Practices
- ใช้ break ทุก case (เว้นแต่ fall-through ที่ตั้งใจ)
- ใส่ default case เสมอ
- จัดกลุ่ม case ที่ทำงานเหมือนกัน (multiple labels)
- พิจารณา enum แทน magic numbers