ใบความรู้ที่ 3.4
โครงสร้าง switch...case
if แบบหลายชั้น ภาษา C# ยังได้เตรียมโครงสร้าง switch...case เพื่อใช้ในการจัดการเงื่อนไขหลาย
เงื่อนไขโดยเฉพาะ การใช้งานโครงสร้าง switch...case อยู่ในรูปแบบดังนี้
switch
(expression)
{
case constant-expression-1:
statements;
break;
case constant-expression-2:
statements;
break;
case constant-expression-3:
statements;
break;
:
default:
statements;
break;
}
|
ภาษา C# ยอมให้นิพจน์ที่ใช้ในตำแหน่ง expression เป็นนิพจน์แบบจำนวนเต็ม (integer)
แบบอักขระ (char) หรือแบบข้อความ (string) เท่านั้น หลังจากที่ค่าของ expression ถูกตรวจสอบ
โปรแกรมจะกระโดดไปทำงาน ณ คำสั่ง case ที่ระบุค่าของ constant-expression ไว้ตรงกับค่า
ของ expression ที่ประเมินได้ คำสั่งต่าง ๆ ที่อยู่ถัดจากคำสั่ง case นั้น ๆ จะถูกเรียกใช้งานตามลำดับ
ไปเรื่อย ๆ จนกว่าโปรแกรมจะพบคำสั่ง break ซึ่งมีผลทำให้โปรแกรมหยุดการทำงานภายในโครงสร้าง
switch...case นั้นและกระโดดไปยังคำสั่งที่ต่อไปนอกโครงสร้าง หากไม่พบ constantexpression
ใดที่มีค่าตรงกับ expression โปรแกรมจะกระโดดไปยังจุดที่มีการระบุด้วยคำสั่ง default
ตัวอย่างที่ 3.5 โปรแกรมต่อไปนี้แสดงแต้มคะแนนตามระดับคะแนน (A,B,C,D,F) ที่ป้อนโดยผู้ใช้
ระดับคะแนน (grade)
|
แต้มระดับคะแนน (grade point)
|
A
|
4.0
|
B
|
3.0
|
C
|
2.0
|
D
|
1.0
|
F
|
0.0
|
using System;
class GradePoint
{
static void Main() {
string grade;
Console.Write("Please input your
grade: ");
grade = Console.ReadLine();
switch (grade) {
case "A" :
Console.WriteLine("Your point is 4.0."); break;
case "a" : Console.WriteLine("Your
point is 4.0."); break;
case "B" :
Console.WriteLine("Your point is 3.0."); break;
case "b" :
Console.WriteLine("Your point is 3.0."); break;
case "C" :
Console.WriteLine("Your point is 2.0."); break;
case "c" :
Console.WriteLine("Your point is 2.0."); break;
case "D" :
Console.WriteLine("Your point is 1.0."); break;
case "d" :
Console.WriteLine("Your point is 1.0."); break;
case "F" :
Console.WriteLine("Your point is 0.0."); break;
case "f" :
Console.WriteLine("Your point is 0.0."); break;
default:
Console.WriteLine("Invalid input!!"); break;
}
}
}
|
ตัวอย่างผลการทำงาน
Please input your
grade: A
Your
point is 4.0.
|
Please input your
grade: B
Your
point is 3.0.
|
Please input your
grade: e
Invalid
input!!
|
แม้ว่าโปรแกรมข้างต้นจะทำงานได้อย่างถูกต้อง โปรแกรมดังกล่าวยังค่อนข้างยาวอีกทั้งโปรแกรม
ยังมีคำสั่งที่ถูกใช้ซ้ำ ๆ กันอยู่หลายแห่งเนื่องจากการป้อนระดับคะแนนด้วยตัวอักษรตัวใหญ่และตัวเล็กจะ
ให้ผลเหมือนกัน ภาษา C# อนุญาตให้คำสั่ง case หลาย ๆ คำสั่งควบคุมชุดคำสั่งร่วมกันได้ดังตัวอย่าง
using System;
class GradePoint
{
static void Main() {
string grade;
Console.Write("Please input your
grade: ");
grade = Console.ReadLine();
switch (grade) {
case
"A" :
case "a" :
Console.WriteLine("Your point is 4.0."); break;
case "B" :
case "b" :
Console.WriteLine("Your point is 3.0."); break;
case "C" :
case "c" : Console.WriteLine("Your
point is 2.0."); break;
case "D" :
case "d" :
Console.WriteLine("Your point is 1.0."); break;
case "F" :
case "f" :
Console.WriteLine("Your point is 0.0."); break;
default:
Console.WriteLine("Invalid input!!"); break;
}
}
}
|
โปรแกรมนี้ยังสามารถทำให้สั้นลงได้อีกโดยการใช้ตัวแปรเสริมอีกตัวเพื่อเก็บแต้มระดับคะแนน
แล้วจึงนำค่าของตัวแปรพิมพ์ออกทางหน้าจอโดยใช้คำสั่ง Console.WriteLine ในคราวเดียวก่อน
จบโปรแกรม ดังแสดง
using System;
class GradePoint
{
static void Main() {
string grade;
double point = -1;
Console.Write("Please input your
grade: ");
grade = Console.ReadLine();
switch (grade) {
case "A" : case "a"
: point = 4.0; break;
case "B" : case "b"
: point = 3.0; break;
case "C" : case "c"
: point = 2.0; break;
case "D" : case "d"
: point = 1.0; break;
case "F" : case "f"
: point = 0.0; break;
default:
Console.WriteLine("Invalid input!!"); break;
}
if (point >= 0)
Console.WriteLine("Your
point is {0:f1}.", point);
}
}
|
ตัวอย่างที่ 3.6 โปรแกรมต่อไปนี้เป็นโปรแกรมเครื่องคิดเลขอย่างง่าย เมื่อเริ่มทำงานโปรแกรมจะให้ผู้ใช้
ป้อนค่าตัวเลขจำนวนจริงสองค่า พร้อมระบุตัวดำเนินการทางคณิตศาสตร์ที่ต้องการโดยเป็นได้เพียง + หรือ - จากนั้นโปรแกรมจะแสดงผลลัพธ์จากการคำนวณ หากผู้ใช้ป้อนตัวดำเนินการอื่นนอกเหนือจาก + หรือ - โปรแกรมจะรายงานความผิดพลาด
1: using System;
2: class Calculator {
3: static void Main() {
4: double n1, n2, ans = 0;
5: char op;
6: Console.Write("Enter the first
number: ");
7: n1 = double.Parse(Console.ReadLine());
8: Console.Write("Enter the second
number: ");
9: n2 = double.Parse(Console.ReadLine());
10: Console.Write("Enter
the operator: ");
11:
op =
char.Parse(Console.ReadLine());
12:
switch(op) {
13:
case '+': ans = n1+n2; break;
14:
case '-': ans = n1-n2; break;
15:
default: op = ' '; break;
16:
}
17:
if (op == ' ')
18:
Console.WriteLine("Invalid
operator!");
19:
else
20:
Console.WriteLine("{0}{1}{2}
= {3}", n1, op, n2, ans);
21:
}
22: }
|
สังเกตบรรทัดที่ 15 ซึ่งใช้จัดการกรณีที่ผู้ใช้ป้อนตัวดำเนินการอื่นนอกเหนือจาก + หรือ - บรรทัดนี้
จะเปลี่ยนค่าของตัวแปร op ให้เป็นช่องว่าง (' ') เพื่อนำไปเช็คที่ท้ายโปรแกรมอีกทีหนึ่ง
ตัวอย่างผลการทำงาน
Enter the first
number: 8
Enter the second
number: 10
Enter the
operator: +
8+10
= 18
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น