Bài 7.2 Cấu trúc switch case trong C#

Trong bài trước, mình đã giới thiệu cho bạn cấu trúc rẽ nhánh trước tiên if else. Trong bài này, mình sẽ giới thiệu cấu trúc switch case trong ₵#. Đây là cấu trúc rẽ nhánh thứ 2 trong ₵#. Vậy trong bài học ngày bây giờ tất cả chúng ta cùng đi tìm tòi cụ thể cấu trúc này nhé !

Cấu trúc switch case trong ₵#

Cấu trúc switch case trong ₵#, có thể nói là cũng giống như cấu trúc switch case trong các từ ngữ dạng biên dịch khác. Nhưng Microsoft đã tái tạo cấu trúc này trong ₵# tiện dụng hơn rất là nhiều. Khác với ₵ cấu trúc switch case chỉ sử dụng được với biến số, thì trong ₵# đã được tái tạo lên sử dụng so với toàn bộ các kiểu dữ liệu miễn là kiểu dữ liệu đó được trợ giúp toán tử ==.

Cấu trúc switch case này được sử dụng với cấu trúc như sau:

Để dễ hiểu hơn, tất cả chúng ta có chẳng hạn như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

String

[

]

args

)

        

{

            

int

α

=

10

;

            

switch

(

α

)

{

                

case

10

:

                    

Console

.

WriteLine

(

“a = 10”

)

;

                    

break

;

                

default

:

                    

break

;

            

}

 

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Ở giai đoạn này chương trình cho ra kết quả:

1

α = 10

Tất cả chúng ta có thể thấy câu lệnh switch ở giai đoạn này mình sử dụng với biến α với α = 10 khi switch của các bạn duyệt qua hết toàn bộ các case thì ở giai đoạn này tất cả chúng ta có case bằng 10. Nên khi duyệt tới case này chương trình sẽ thực hiện câu lệnh bên trong.

Câu lệnh default ở giai đoạn này các bạn có thể thấy nó như không có công dụng, nhưng câu lệnh default này sẽ thực hiện câu lệnh bên trong khi toàn bộ các case đều sai:

Xem Thêm  Cách định dạng chuỗi bằng Python - cách định dạng chuỗi trong python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

String

[

]

args

)

        

{

            

int

α

=

25

;

            

switch

(

α

)

{

                

case

10

:

                    

Console

.

WriteLine

(

“a = 10”

)

;

                    

break

;

                

case

20

:

                    

Console

.

WriteLine

(

“a = 20”

)

;

                    

break

;

                

default

:

                    

Console

.

WriteLine

(

“a khong co trong case nao”

)

;

                    

break

;

            

}

 

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình lần này mình đã để cho biến α không trúng 1 case nào. Như tất cả chúng ta có thể thấy biến α = 25 nên không trùng với case 10 & case 20 nên chương trnihf sẽ chuyển xuống câu lệnh label default phía dưới.

Nhưng bạn có thấy điều kì quái ở giai đoạn này không ?

Này là trong mỗi case hoặc default mình đều để thêm câu lệnh break ở dưới. Nói sơ qua một tí thì câu lệnh break này sẽ làm chương trình thoát ra khỏi vòng lặp đang chạy hoặc làm chương trình thoát ra khỏi cấu trúc switch case. Vậy tất cả chúng ta thử bỏ các câu lệnh break này đi xem có gì xảy ra không nhé.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

String

[

]

args

)

        

{

            

int

α

=

20

;

            

switch

(

α

)

{

                

case

10

:

                    

Console

.

WriteLine

(

“a = 10”

)

;

                

case

20

:

                    

Console

.

WriteLine

(

“a = 20”

)

;

                

default

:

                    

Console

.

WriteLine

(

“a khong co trong case nao”

)

;

            

}

 

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này mình đã bỏ các câu lệnh break trong cấu trúc này. & hiện giờ chương trình xảy ra lỗi:

Xem Thêm  Ngôn ngữ cơ thể của đầu - đầu làm gì

1

2

3

4

5

₵:UsersXXXXDesktopprojectluyencodec#Program.cs(11,5): error CS0163: Control cannot fall through from one case label (‘case 10:’) to another [C:UsersXXXXDesktopprojectluyencodec#luyencodec#.csproj]

₵:UsersXXXXDesktopprojectluyencodec#Program.cs(13,5): error CS0163: Control cannot fall through from one case label (‘case 20:’) to another [C:UsersXXXXDesktopprojectluyencodec#luyencodec#.csproj]

₵:UsersXXXXDesktopprojectluyencodec#Program.cs(15,5): error CS8070: Control cannot fall out of switch from final case label (‘default:’) [C:UsersXXXXDesktopprojectluyencodec#luyencodec#.csproj]

 

The build failed. Fix the build errors and run again.

Hiện thời chương trình lại xảy ra lỗi, lỗi này bảo rằng chẳng thể thoát ra khỏi các case trong cấu trúc. Chính vì thế, mỗi lần tạo một case trong cấu trúc này tất cả chúng ta phải thêm câu lệnh break bên dưới case đó tránh trường hợp cấu trúc này sẽ duyệt đi duyệt lại & chương trình sẽ chạy bất tận.

Này là chẳng hạn với biến số, ở phần trên mình đã đề cập rằng cấu trúc switch case trong ₵# có thể làm việc với toàn bộ các loại dữ liệu miễn dữ liệu đó được trợ giúp toán tử ==. Vậy mình có chẳng hạn về một “con AI switch case” như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

String

[

]

args

)

        

{

            

Console

.

WriteLine

(

“Please talk something here.”

)

;

            

string

talk

=

Console

.

ReadLine

(

)

;

            

switch

(

talk

)

{

                

case

“Hello”

:

                    

Console

.

WriteLine

(

“Hi !”

)

;

                    

break

;

                

case

“What’s your name”

:

                    

Console

.

WriteLine

(

“My name is Lap trinh khong kho !”

)

;

                    

break

;

                

default

:

                    

Console

.

WriteLine

(

“Oops ! I don’t hear what you say ?”

)

;

                    

break

;

            

}

 

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Tất cả chúng ta chạy thử chương trình xem con AI này hoạt động nhé !

chẳng hạn với nhập vào Hello

ai2

chẳng hạn với nhập vào What’s your name

ai3

chẳng hạn nhập vào khác với 2 chẳng hạn trên

Như thế tất cả chúng ta chỉ đơn ginả là dùng câu lệnh switch case. Tất cả chúng ta có thể tạo thành một con AI chuyện trò dễ dàng. Nhưng nên nhớ đây không phải cách làm ra một con máy biết chuyện trò đâu nhé !

Xem Thêm  Tạo / ghi tệp PHP - php ghi đầu vào vào tệp

Bao giờ sử dụng switch case & if else ?

Sau thời điểm tất cả chúng ta biết đươc 2 cấu trúc rẽ nhánh trong ₵# rồi, thì có nhiều bạn lại sử dụng 2 cấu trúc này lung tung làm chương trình hiện ra lỗi tràn ngập, khó giải quyết. Trong phần này mình sẽ note lại cho các bạn một số phương pháp để phân biệt bao giờ nên sử dụng switch case & bao giờ nên sử dụng if else nhé !

  • Đầu tiên: Chỉ nên sử dụng cấu trúc if else khi biểu thức logic của các bạn cần kiểm soát là một biểu thức logic cầu kỳ (bao gồm <=, >=, ||, &&, !) & nhiều câu lệnh điều kiện khác ở bên trong.
  • Thứ hai: Chỉ nên sử dụng cấu trúc switch case khi biểu thức đầu vào của các bạn có trợ giúp toán tử == & biểu thức đó không phải là biểu thức logic cầu kỳ.

Như thế nhờ 2 note trên mong là các bạn có thể đơn giản phân biệt đươc lúc nào nên sử dụng switch case & lúc nào nên sử dụng if else.

Kết luận

Như thế là trong bài học ngày hôm này mình đã chỉ dẫn nốt phần sót lại của cấu trúc rẽ nhánh trong ₵#. Bài học kế tiếp tất cả chúng ta sẽ học về cấu trúc cũng không kém phần trọng yếu khác này là cấu trúc lặp trong ₵#. Cảm ơn bạn đã đọc nội dung này. Hãy tiếp tục ủng hộ Lập trình không khó trong các nội dung kế tiếp nhé !

(không những thế các bạn có thể thử qua với các bài tập sau đây)

Viết một bình luận