คำสั่ง Switch case
เงื่อนไข(SWITCH CASE)
เงื่อนไข(switch case)เป็นเงื่อนไขเช่นเดียวกับ if-else แต่จะมีความเที่ยงตรงที่สูงกว่า และใช้ได้ค่อยข้างจำกัด โดยส่วนใหญ่แล้วจะใช้ในการควบคุมการแสดงผลทางเมาส์ และคีย์บอร์ด แต่ก็สามารถนำมาใช้เป็นเงื่อนไขเช่นเดียวกับ if-else ซึ่งการใช้นั้นจะต้องใช้ตามรูปแบบหรือ syntax ของมันครับ หากไม่ต้องกับรูปแบบแล้วเงื่อนไขก็จะใช้ไม่ได้หรือerror นั่นเองครับ การใช้ switch case นั้นนิยมใช้กับ main manu ครับ เพื่อที่จะได้เลือกใช้ฟังก์ชันย่อยๆต่อไปรูปแบบการใช้งาน
ตัวอย่างการใช้งาน
#include <iostream>
using namespace std;
int main()
{
int n = 1;
switch (n)
{
case 1:
cout << "n is 1";
break;
case 2:
cout << "n is 2";
break;
default:
cout << "Unknown n";
}
return 0;
}
case
เป็นคำสั่งเงื่อนไขเพื่อเปรียบเทียบค่า ในตัวอย่าง case 1:
จะทำงานเมื่อ n
มีค่าเท่ากับ 1
หลังจากคำสั่งด้านล่างเราต้องใส่คำสั่ง break
เพื่อหยุดสำหรับแต่ละ case ไม่เช่นนั้นโปรแกรมจะทำงานไปจนกว่าจะพบคำสั่ง break
หรือสิ้นสุดบล็อคคำสั่งของ switch
และคำสั่ง default
นั้นเป็นทางเลือกเมื่อโปรแกรมไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้าเช่นเดียวกับคำสั่ง else
#include <iostream>
using namespace std;
int main()
{
int n = 1;
if (n == 1)
{
cout << "n is 1";
}
else if (n == 2)
{
cout << "n is 2";
}
else
{
cout << "Unknown n";
}
return 0;
}
คำสั่ง switch - case
การควบคุมเงื่อนไขด้วย switch-case (switch-statement) นอกจากประโยคคำสั่ง if-else แล้วในภาษา c++ ก็ยังมีการควบคุมเงื่อนไขด้วยการใช้ประโยคคำสั่ง switch โดยประโยคคำสั่ง switch เหมาะกับการนำไปประยุกต์ใช้กับโปรแกรมที่มีเมนูให้เลือกรายการต่างๆ รูปแบบ : switch (integer_expression) { case constant_1; statement_1; break; case constant_2; statement_2; break; case constant_3; statement_3; break; default; statement; } ผลการตรวจสอบเงื่อนไข จะขึ้นอยู่กับค่า integer_expression ถ้าเงื่อไขที่ตรวจสอบอยู่ภายในเงื่อนไขที่กำหนด ก็จะทำงานชุดคำสั่งภายใน case ของ constant นั้น แต่ถ้าหากไม่พบเงื่อนไขตามแต่ละ case ที่กำหนดไว้เลย ก็จะไปทำชุดคำสั่งที่ default แทน อย่างไรก็ตามเงื่อนไขของแต่ละ case นั้นควรบรรจุคำสั่ง break เข้าไปด้วยทั้งนี้เพื่อป้องกันมิให้ตรวจสอบเงื่อนไขถัดไป ส่วนกรณี default นั้นไม่จำเป็นต้องมีคำสั่ง break |
Syntax
switch(expression) { case constant-expression : statement(s); break; //optional case constant-expression : statement(s); break; //optional // you can have any number of case statements. default : //Optional statement(s); }
- The expression used in a switch statement must have an integral or enumerated type, or be of a class type in which the class has a single conversion function to an integral or enumerated type.
- You can have any number of case statements within a switch. Each case is followed by the value to be compared to and a colon.
- The constant-expression for a case must be the same data type as the variable in the switch, and it must be a constant or a literal.
- When the variable being switched on is equal to a case, the statements following that case will execute until a break statement is reached.
- When a break statement is reached, the switch terminates, and the flow of control jumps to the next line following the switch statement.
- Not every case needs to contain a break. If no break appears, the flow of control will fall through to subsequent cases until a break is reached.
- A switch statement can have an optional default case, which must appear at the end of the switch. The default case can be used for performing a task when none of the cases is true. No break is needed in the default case.
Flow Diagram
Example
#include <iostream> using namespace std; int main () { // local variable declaration: char grade = 'D'; switch(grade) { case 'A' : cout << "Excellent!" << endl; break; case 'B' : case 'C' : cout << "Well done" << endl; break; case 'D' : cout << "You passed" << endl; break; case 'F' : cout << "Better try again" << endl; break; default : cout << "Invalid grade" << endl; } cout << "Your grade is " << grade << endl; return 0; }
You passed Your grade is D
คลิปการตรวจสอบเงื่อนไขด้วย switch case ลอกมาจาก https://www.youtube.com/watch?v=VN-Aij0UVdc
#include <iostream>
using namespace std;
void demo_switch() {
cout <<
"1. kid" << endl;
cout <<
"2. adult" << endl;
cout <<
"3. senior" << endl;
cout <<
"select a choice. ";
int fare; //
undefined behavior
char choice;
cin >>
choice;
switch
(tolower(choice)) {
case '1':
case 'k':
//
case 'K':
case '3':
case 's':
//
case 'S':
fare = 10;
cout
<< "kid or senior" << endl;
break;
case '2':
case 'a':
//
case 'A':
fare = 20;
cout
<< "adult" << endl;
break;
default:
fare = 20;
cout
<< "default fare rate" << endl;
break;
}
// if
(choice == '1' || tolower(choice) == 'k' || choice
== '3' || tolower(choice) == 's') {
//
cout << "kid or senior" << endl;
//
fare = 10;
// }
else if (choice == '2' || tolower(choice) == 'a') {
//
cout << "adult" << endl;
//
fare = 20;
// }
else {
//
fare = 20;
//
cout << "default fare rate" << endl;
// }
cout <<
"fare = " << fare << endl;
}
int main() {
demo_switch();
return 0;
}
C++ Tutorial - 21 - Switch Statement
การใช้คำสั่ง switch...case | ||||||||
รูปแบบของคำสั่ง switch...case | ||||||||
การพัฒนาโปรแกรมแบบเลือกหลายทาง โปรแกรมแบบเลือกหลายทางจะใช้สำหรับกรณีที่มีทางเลือกหลายทาง แต่ให้เลือกทำเพียงทางเลือกเดียวเท่านั้น การใช้ฟังก์ชัน switch ในการเขียนลักษณะการทำงานจึงเหมือนกับฟังก์ชัน if…else…ซ้อนกัน แต่ใช้งานได้สะดวกกว่า เหมาะอย่างยิ่งสำหรับเขียนโปรแกรม เพื่อสร้างทางเลือกรายการ (Menu) ของโปรแกรม ภาษาซีจึงมีคำสั่ง switch() สำหรับทำงานดังกล่าว และมีโครงสร้างของรูปแบบเลือกหลายทางโดยทั่วไปเขียนได้ดังนี้ | ||||||||
| ||||||||
เราสามารถเขียนเป็นคำบรรยายเทียบกับรูปแบบของคำสั่ง switch() ดังนี้ | ||||||||
| ||||||||
โดยทั่วไปการทำงานของคำสั่ง switch() จะมีอยู่ 2 รูปแบบขึ้นอยู่กับการใช้คำสั่งย่อย break หรือไม่ใช้ การทำงานจะได้ผลลัพธ์ต่างกัน แสดงตามผังงานดังนี้ | ||||||||
จากผังงานรูปที่ 12-2 แสดงการทำงานของคำสั่ง switch() ที่ไม่มีคำสั่ง break ทำให้ทราบว่า การทำงานหลังจากตรวจสอบว่าเงื่อนไขที่ 1เป็นจริง จะทำกิจกรรมที่ 1 เสร็จแล้วจะทำกิจกรรมที่ 2 ทำกิจกรรมต่อ ๆ ไปจนถึง กิจกรรมที่ n กล่าวคือ จะทำกิจกรรมทุกกิจกรรมที่อยู่ต่อจากกิจกรรมที่ 1 แต่ถ้าเงื่อนไขที่ 1 ไม่จริง จะไปตรวจสอบเงื่อนไขที่ 2 ถ้าเงื่อนไขที่ 2 เป็นจริง จะทำกิจกรรมตั้งแต่กิจกรรมที่ 2 และทำงานตามกิจกรรมอื่น ๆ ที่อยู่ต่อจากกิจกรรมที่ 2 ด้วย การทำงานจะเป็นลักษณะเช่นนี้ต่อไปเรื่อย ๆ หรืออธิบายให้เข้าใจง่าย ๆ ก็คือ คำสั่งswitch() จะทำงานตามคำสั่งตั้งแต่ที่พบว่า การตรวจสอบเงื่อนไขใดเป็นจริงและทำต่อไปทุกคำสั่งทั้งที่เงื่อนไขอื่น อาจจะไม่จริงก็ได้ ซึ่งการทำงานมักจะไม่ถูกต้อง และไม่เป็นไปตามความต้องการของผู้ใช้ ภาษาซี จึงแก้ปัญหานี้โดยเพิ่มคำสั่ง break ต่อจากคำสั่งแต่ละชุดของเงื่อนไขนั้น ๆ การทำงานจะเป็นไปตามรูปที่ 12-3 ที่แสดงผังงานของคำสั่ง switch รูปแบบที่มีคำสั่ง break กล่าวคือ หลังจากตรวจสอบเงื่อนไขที่ 1 ทราบว่าเป็นจริง จะทำกิจกรรมที่ 1 แล้ว ออกจากคำสั่ง switch ข้ามไปทำงานตามคำสั่งที่อยู่ต่อจากคำสั่ง switch() ต่อไป เช่นเดียวกับที่ตรวจสอบเงื่อนไขที่ 2 ถ้าเป็นจริง จะทำกิจกรรมที่ 2 แล้วออกจากคำสั่งswitch() แล้วข้ามไปทำงานต่อไป ซึ่งจะสอดคล้องกับความต้องการของผู้ใช้โปรแกรมที่เมื่อเลือกกรณีใดแล้ว การทำงานก็ควรจะทำเฉพาะที่เงื่อนไขนั้นเป็นจริงเท่านั้น การทำงานของเงื่อนไขอื่น ๆ ก็ไม่ควรทำ เราจะสามารถเขียนเป็นรูปแบบของคำสั่ง switch() ทั้ง 2 รูปแบบได้ดังนี้ | ||||||||
| ||||||||
|