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語句用法總結