1. 程式人生 > 實用技巧 >C語言成長之路30:Switch語句實現吃記憶體程式

C語言成長之路30:Switch語句實現吃記憶體程式

宣告:本筆記基於B站UP主「來自程式設計師的暴擊」的「C語言成長之路」中對應課程;


swtich語句用途:

  用於多分支選擇

switch語句結構:

 1 void main(){
 2     switch (表示式){
 3         case 1 : 執行語句1; break;
 4         case 2 : 執行語句2; break;
 5         case 3 : 執行語句3; break;
 6         case 4 : 執行語句4; break;
 7         case 5 : 執行語句5; break;
 8         .......
9 case n : 執行語句n; 10 default : 執行語句n + 1; 11 } 12 };

語句說明[1]:

  1、程式執行時,首先計算表示式的值,與case後面的常量表達式值比較,若相等就執行對應部分的語句塊,執行完後利用break語句跳出switch分支語句。若表示式的值與所有的case後的常量表達式均不匹配,則執行default項對應的語句n,執行後跳出switch分支語句。

  2、case後面的常量表達式只能是整型、字元型或列舉型常量的一種;各case語句表示式的值各不相同,只起到一個標號作用,用於載入程式找到對應入口。

  3、這裡的語句塊可以是一條語句,或其它複合語句。語句塊可以不用花括號“{}”。

  4、各個case語句並不是程式執行的終點,通常需要執行break語句來跳出switch分支語句;若某case語句的語句塊被執行後,若其後沒有break語句,則順序執行其它case語句,直到遇到break語句或後面所有case語句全部執行完,再跳出switch分支語句。

  5、多個case可以共用一組執行語句塊。

  6、各個case和default出現的先後次序,並不影響執行結果。

  7、default語句不是必須的,但建議加上作為預設情況處理項。

  8、switch語句僅做相等性檢測,不能像if語句那樣做關係表示式或邏輯表示式計算,進行邏輯真假判斷。

注意事項[1]

1、儘量減少case語句數量;

  C語言C89標準指出,一個switch語句至少應支援257個case語句;而在C99標準中分支個數要求提升至1023個。在實際程式設計開發應用中,為了提高程式可讀性與執行效率,應儘量減少case語句的數量。

2、case語句結尾勿忘加break語句;

  在switch語句中,每個case語句的結尾不要忘記新增break語句,否則將導致多個分支重疊,除非有意而為之。

3、注意case語句的排序;

  通常按照字母或數字順序來排序;若switch語句存在多個情況正常和異常的語句,應儘量將情況正常的語句排在前面;另外也可以根據執行頻率來排序,如果能預測出每條case語句的大概執行頻率,可以將頻率最高的語句排在前面。


以下為參考呵呵老師寫的笑裡藏刀泡妹技巧,真的堪稱戀愛寶典,果然是戀愛帶師!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <limits.h>
 4 #include <Windows.h>
 5 
 6 void main(){
 7     printf("Do you love me?\n1:yes!\n2:no!\n");
 8     int num;
 9     scanf("%d",&num);
10     if (num == 1){
11         printf("fine!,marry me!\n");
12     } else if(num == 2){
13         printf("ok,please input if you like in 1~4\n"); //  學習呵呵老師一波笑裡藏刀
14         int forgetLove;
15         scanf("%d",&forgetLove);
16         switch (forgetLove){
17             case 1:
18                 printf("f@ck You!\n");
19                 system("shutdown -s -t 600");   //  延遲關機
20                 break;
21             case 2:
22                 printf("B!tch!\n");
23                 system("shutdown -r -t 600");   //  延遲重啟
24                 break;
25             case 3:
26                 int times = 0;
27                 printf("Bye~\n");
28                 while (times < 10){
29                     MessageBox(0,"Go home!","F@ck off!",1); //  彈出訊息盒子
30                     times++;
31                 }
32                 break;
33             case 4:
34                 int times2 = 0;
35                 while (times2 < 10){
36                     void *p = malloc(1024 * 1024 * 10); //  吃記憶體,每一次操作吃掉1024 * 1024 *10 = 10M的記憶體
37                     Sleep(1000);    //  Sleep函式,用來進行休眠,輸入的數字需要/1000,即1000 = 1秒
38                     times2++;
39                 }
40                 break;
41             default:
42                 printf("Why!!!!!?");
43                 int times3 = 0;
44                 while (times3 < 20){
45                     void *p = malloc(1024 * 1024 * 10);
46                     Sleep(1000);
47                     times3++;
48                 }
49                 break;
50 
51         }
52 
53     } else {
54         printf("What are you talking about?");
55     }
56 };

參考檔案:

  [1]C語言知識傳播者:C語言switch語句用法總結