switch…case ใน C (สลับคำสั่งใน C) พร้อมตัวอย่าง
คำสั่ง Switch ใน C คืออะไร?
สลับคำสั่งใน C ทดสอบค่าของตัวแปรและเปรียบเทียบกับหลายๆ กรณี เมื่อพบกรณีที่ตรงกันแล้ว จะดำเนินการชุดคำสั่งที่เชื่อมโยงกับกรณีนั้นๆ
แต่ละกรณีในบล็อกของสวิตช์จะมีชื่อ/หมายเลขที่แตกต่างกันซึ่งเรียกว่าตัวระบุ ค่าที่ผู้ใช้ให้ไว้จะถูกนำไปเปรียบเทียบกับกรณีทั้งหมดภายในบล็อกสวิตช์จนกว่าจะพบค่าที่ตรงกัน
หากไม่พบการจับคู่ตัวพิมพ์ คำสั่งเริ่มต้นจะถูกดำเนินการ และตัวควบคุมจะออกจากบล็อกสวิตช์
สลับไวยากรณ์กรณี
ไวยากรณ์ทั่วไปของวิธีการใช้ switch-case ในโปรแกรม 'C' มีดังนี้:
switch( expression ) { case value-1: Block-1; Break; case value-2: Block-2; Break; case value-n: Block-n; Break; default: Block-1; Break; } Statement-x;
- นิพจน์อาจเป็นนิพจน์จำนวนเต็มหรือนิพจน์อักขระก็ได้
- ค่า-1, 2, n คือป้ายกำกับเคสซึ่งใช้เพื่อระบุแต่ละเคสแยกกัน โปรดจำไว้ว่าเลเบลเคสไม่ควรเหมือนกันเนื่องจากอาจทำให้เกิดปัญหาขณะรันโปรแกรมได้ สมมติว่าเรามีสองกรณีที่มีป้ายกำกับเดียวกันกับ '1' จากนั้นในขณะที่รันโปรแกรม เคสที่ปรากฏก่อนจะถูกดำเนินการแม้ว่าคุณจะต้องการให้โปรแกรมรันเคสที่สองก็ตาม สิ่งนี้สร้างปัญหาในโปรแกรมและไม่ได้ให้ผลลัพธ์ที่ต้องการ
- ป้ายกำกับเคสจะลงท้ายด้วยเครื่องหมายโคลอน ( : ) เสมอ แต่ละกรณีเหล่านี้เชื่อมโยงกับบล็อก
- บล็อกคืออะไรแต่มีคำสั่งหลายคำสั่งที่ถูกจัดกลุ่มไว้สำหรับกรณีเฉพาะ
- เมื่อใดก็ตามที่สวิตช์ถูกดำเนินการ ค่าของการทดสอบนิพจน์จะถูกเปรียบเทียบกับทุกกรณีที่เรากำหนดไว้ภายในสวิตช์ สมมติว่านิพจน์ทดสอบมีค่า 4 ค่านี้จะถูกเปรียบเทียบกับทุกกรณีจนกระทั่งพบกรณีที่มีป้ายกำกับสี่ในโปรแกรม ทันทีที่พบเคส บล็อกคำสั่งที่เกี่ยวข้องกับเคสนั้นจะถูกดำเนินการ และการควบคุมจะออกจากสวิตช์
- คีย์เวิร์ดแบ่งในแต่ละกรณีบ่งชี้จุดสิ้นสุดของกรณีเฉพาะ หากเราไม่ทำการหยุดพักในแต่ละกรณี แม้ว่าจะดำเนินการกับกรณีเฉพาะแล้ว สวิตช์ใน C จะดำเนินการดำเนินการทุกกรณีต่อไปจนกว่าจะถึงจุดสิ้นสุด สิ่งนี้ไม่ควรเกิดขึ้น ดังนั้นเราจึงต้องใส่คำว่า break ในแต่ละกรณีเสมอ ตัวแบ่งจะยุติเคสเมื่อดำเนินการ และตัวควบคุมจะหลุดออกจากสวิตช์
- กรณีเริ่มต้นคือกรณีเสริม เมื่อใดก็ตามที่ค่าของ test-expression ไม่ตรงกับกรณีใดๆ ภายในสวิตช์ ค่าเริ่มต้นจะถูกดำเนินการ มิฉะนั้น ไม่จำเป็นต้องเขียนค่าเริ่มต้นในสวิตช์
- เมื่อสวิตช์ถูกดำเนินการ การควบคุมจะไปที่คำสั่ง-x และการทำงานของโปรแกรมจะดำเนินต่อไป
สลับผังงานคำสั่ง
แผนภาพต่อไปนี้แสดงให้เห็นวิธีการเลือกเคสในเคสสวิตช์:
ตัวอย่างเคสสวิตช์ใน C
โปรแกรมต่อไปนี้แสดงการใช้สวิตช์:
#include <stdio.h> int main() { int num = 8; switch (num) { case 7: printf("Value is 7"); break; case 8: printf("Value is 8"); break; case 9: printf("Value is 9"); break; default: printf("Out of range"); break; } return 0; }
Output:
Value is 8
- ในโปรแกรมที่กำหนดเราได้อธิบายการเริ่มต้นก ตัวแปร ตัวเลขที่มีค่า 8
- โครงสร้างสวิตช์ใช้เพื่อเปรียบเทียบค่าที่เก็บไว้ในตัวแปร num และดำเนินการบล็อกคำสั่งที่เกี่ยวข้องกับกรณีที่ตรงกัน
- ในโปรแกรมนี้ เนื่องจากค่าที่เก็บไว้ในตัวแปร num คือ 8 สวิตช์จะดำเนินการเคสที่มีป้ายกำกับเคสเป็น XNUMX หลังจากดำเนินการเคสแล้ว การควบคุมจะหลุดออกจากสวิตช์และโปรแกรมจะสิ้นสุดลงด้วยผลลัพธ์ที่สำเร็จโดย การพิมพ์ค่าบนหน้าจอเอาท์พุต
ลองเปลี่ยนค่าของตัวแปร num และสังเกตการเปลี่ยนแปลงในเอาต์พุต
ตัวอย่างเช่น เราพิจารณาโปรแกรมต่อไปนี้ซึ่งเป็นค่าเริ่มต้น:
#include <stdio.h> int main() { int language = 10; switch (language) { case 1: printf("C#\n"); break; case 2: printf("C\n"); break; case 3: printf("C++\n"); break; default: printf("Other programming language\n");}}
Output:
Other programming language
เมื่อทำงานกับ switch case ใน C คุณจะจัดกลุ่มหลายเคสด้วยป้ายกำกับที่ไม่ซ้ำกัน คุณต้องแนะนำคำสั่งแบ่งในแต่ละกรณีเพื่อแยกสาขาที่ส่วนท้ายของคำสั่ง switch
กรณีเริ่มต้นที่เป็นทางเลือกจะทำงานเมื่อไม่มีการจับคู่อื่นๆ
เราพิจารณาคำสั่งสวิตช์ดังต่อไปนี้:
#include <stdio.h> int main() { int number=5; switch (number) { case 1: case 2: case 3: printf("One, Two, or Three.\n"); break; case 4: case 5: case 6: printf("Four, Five, or Six.\n"); break; default: printf("Greater than Six.\n");}}
Output:
Four, Five, or Six.
สวิตช์ที่ซ้อนกันใน C
In Cเราก็สามารถมีสวิตช์ตัวในฝังอยู่ในสวิตช์ตัวนอกได้ นอกจากนี้ ค่าคงที่เคสของสวิตช์ด้านในและด้านนอกอาจมีค่าร่วมกันและไม่มีข้อขัดแย้งใดๆ
เราพิจารณาโปรแกรมต่อไปนี้ซึ่งผู้ใช้จะต้องพิมพ์ ID ของตัวเอง หาก ID ถูกต้องโปรแกรมจะขอให้ป้อนรหัสผ่าน หากรหัสผ่านถูกต้องโปรแกรมจะพิมพ์ชื่อผู้ใช้ มิฉะนั้นโปรแกรมจะพิมพ์รหัสผ่านไม่ถูกต้อง และหากไม่มี ID โปรแกรมจะพิมพ์ ID ไม่ถูกต้อง
#include <stdio.h> int main() { int ID = 500; int password = 000; printf("Plese Enter Your ID:\n "); scanf("%d", & ID); switch (ID) { case 500: printf("Enter your password:\n "); scanf("%d", & password); switch (password) { case 000: printf("Welcome Dear Programmer\n"); break; default: printf("incorrect password"); break; } break; default: printf("incorrect ID"); break; } }
Output:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- ในโปรแกรมที่กำหนด เราได้อธิบายการเริ่มต้นตัวแปรสองตัว: ID และรหัสผ่าน
- โครงสร้างสวิตช์ภายนอกใช้เพื่อเปรียบเทียบค่าที่ป้อนใน ID ตัวแปร มันดำเนินการบล็อกคำสั่งที่เกี่ยวข้องกับกรณีที่ตรงกัน (เมื่อ ID==500)
- หากคำสั่งบล็อกถูกดำเนินการกับกรณีที่ตรงกัน สวิตช์ภายในจะถูกใช้เพื่อเปรียบเทียบค่าที่ป้อนในรหัสผ่านตัวแปร และดำเนินการคำสั่งที่เชื่อมโยงกับกรณีที่ตรงกัน (เมื่อรหัสผ่าน==000)
- หากเป็นกรณีอื่น เคสสวิตช์จะทริกเกอร์เคสเริ่มต้นและพิมพ์ข้อความที่เหมาะสมเกี่ยวกับโครงร่างโปรแกรม
ทำไมเราต้องมีเคสสวิตช์?
มีปัญหาที่อาจเกิดขึ้นประการหนึ่งกับ คำสั่ง if-else ซึ่งก็คือความซับซ้อนของโปรแกรมจะเพิ่มขึ้นทุกครั้งที่มีทางเลือกอื่นเพิ่มขึ้น หากคุณใช้โครงสร้าง if-else หลายรายการในโปรแกรม โปรแกรมอาจอ่านและทำความเข้าใจได้ยาก บางครั้งอาจทำให้ผู้พัฒนาโปรแกรมเองเกิดความสับสนได้
วิธีแก้ไขปัญหานี้คือคำสั่ง switch
กฎสำหรับคำสั่งสวิตช์
- นิพจน์จะต้องดำเนินการกับผลลัพธ์เสมอ
- เลเบลเคสต้องเป็นค่าคงที่และไม่ซ้ำกัน
- ป้ายกำกับกรณีต้องลงท้ายด้วยเครื่องหมายโคลอน ( : )
- ต้องมีคีย์เวิร์ดแบ่งในแต่ละกรณี
- มีป้ายกำกับเริ่มต้นได้เพียงป้ายกำกับเดียวเท่านั้น
- เราสามารถซ้อนคำสั่ง switch หลายคำสั่งได้
สรุป
- สวิตช์คือโครงสร้างการตัดสินใจใน 'C. '
- สวิตช์ใช้ในโปรแกรมที่เกี่ยวข้องกับการตัดสินใจหลายอย่าง
- สวิตช์จะต้องมีนิพจน์การทดสอบที่ปฏิบัติการได้
- แต่ละกรณีต้องมีคีย์เวิร์ดตัวแบ่ง
- ป้ายกำกับกรณีต้องเป็นค่าคงที่และไม่ซ้ำกัน
- ค่าเริ่มต้นคือตัวเลือก
- คำสั่งสวิตช์หลายรายการสามารถซ้อนกันภายในกันได้