自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

編程意識——將字符串與功能宏進(jìn)行綁定

開發(fā) 前端
利用switch和case的散轉(zhuǎn)功能,宏作為散轉(zhuǎn)條件,每一個宏對應(yīng)一種功能,將宏和字符串進(jìn)行綁定,這樣通過比較字符串的方式,就能獲得對應(yīng)宏的功能代碼。

[[379503]]

編 者 悟 語

對于事的打算,永遠(yuǎn)都不要認(rèn)為別人考慮的過多,經(jīng)事的你可能才會發(fā)現(xiàn),不是別人想得太多,而是你想得太少。(思考是一種習(xí)慣,而不是一種負(fù)擔(dān))

文 章 導(dǎo) 讀

今天給小伙伴們帶來一段簡短的代碼,簡短但精致,將字符串與功能宏進(jìn)行綁定,這樣做的好處是調(diào)整代碼比較方便,掌握后你就會明白什么才是結(jié)構(gòu)清晰,閱讀過程中如果有什么問題,可以后臺留言哈。

1 代碼原理說明

利用switch和case的散轉(zhuǎn)功能,宏作為散轉(zhuǎn)條件,每一個宏對應(yīng)一種功能,將宏和字符串進(jìn)行綁定,這樣通過比較字符串的方式,就能獲得對應(yīng)宏的功能代碼。

此代碼的好處是宏代碼不用變的情況下,字符串和功能宏的對應(yīng)是可以根據(jù)需要進(jìn)行隨意調(diào)整的。

代碼結(jié)構(gòu)清晰,易于維護(hù)。

2 實(shí)現(xiàn)源碼

1)實(shí)現(xiàn)代碼

一切說明,盡在注釋中啦!代碼可以理解為等級評定吧,實(shí)際意義不大,大家多關(guān)注這個小代碼的結(jié)構(gòu)吧!

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. // 功能宏散轉(zhuǎn)編號  
  5. #define ONE_STAR    1 
  6. #define TWO_STAR    2 
  7. #define THREE_STAR  3 
  8. #define FOUR_STAR   4 
  9. #define FIVE_STAR   5 
  10.  
  11. #define ZERO        0    // 無效輸入返回值  
  12.  
  13.  
  14. /* 定義查找對應(yīng)表結(jié)構(gòu)及查找表數(shù)組 */ 
  15. static struct lookuptable  
  16.      char *str;   // 指向字符串  
  17.      int code;    // 對應(yīng)宏功能碼  
  18. }tab[]= {      
  19.      // 字符串口與功能指示紅的對應(yīng)表,可以根據(jù)需要隨意調(diào)整,下面的1-5可以換為任意字符串,只是輸入時(查找時)也要一一對應(yīng)上  
  20.      {"1", ONE_STAR},  
  21.      {"2", TWO_STAR}, 
  22.      {"3", THREE_STAR}, 
  23.      {"4", FOUR_STAR}, 
  24.      {"5", FIVE_STAR} 
  25. };  
  26.  
  27. // 查找函數(shù)聲明 
  28. SearchFunc(char *s); 
  29.  
  30.  
  31. int main(int argc, char *argv[])  
  32.   
  33.       int score = 0; 
  34.       char str[10] = "\0";  
  35.   
  36.   
  37.       printf("Please input number 1-5 to evaluate: "); 
  38.   
  39.       gets(str); 
  40.   
  41.       // 根據(jù)星級進(jìn)行處理,這里就是簡單的賦值,實(shí)際應(yīng)用中可以根據(jù)需要更多  
  42.       switch(SearchFunc(str)) 
  43.       { 
  44.            case ONE_STAR: 
  45.            { 
  46.                 score += 1; 
  47.                 break; 
  48.            }  
  49.       
  50.            case TWO_STAR: 
  51.            { 
  52.                 score += 2; 
  53.                 break; 
  54.            } 
  55.    
  56.    
  57.           case THREE_STAR: 
  58.           { 
  59.                score += 3; 
  60.                break; 
  61.           } 
  62.    
  63.           case FOUR_STAR: 
  64.           { 
  65.                score += 4; 
  66.                break; 
  67.           } 
  68.    
  69.           case FIVE_STAR: 
  70.           { 
  71.                score += 5; 
  72.                break; 
  73.           } 
  74.   
  75.       
  76.           case ZERO:  // 無效的情況,打印無效提升  
  77.           { 
  78.                printf("\nYour input is invaild!\n"); 
  79.                break; 
  80.           } 
  81.    
  82.       }   
  83.   
  84.      // 輸入有效才進(jìn)行星級打印  
  85.      if(SearchFunc(str)!=ZERO) 
  86.      { 
  87.           printf("\nThe score is: %d\n",score); 
  88.      } 
  89.   
  90.      return 0; 
  91.  
  92.  
  93. /* 宏功能查找函數(shù) */   
  94. SearchFunc(char *s) 
  95.       int i;  
  96.   
  97.       for(i=0; i< sizeof(tab)/sizeof(tab[0]); i++) 
  98.       { 
  99.             if(strcmp(tab[i].str, s)==0) 
  100.             { 
  101.                   return tab[i].code; 
  102.             } 
  103.       } 
  104.   
  105.       return ZERO;     // 輸入不再范圍內(nèi)標(biāo)記為0  

2)運(yùn)行結(jié)果

① 輸入值在有效范圍1-5時,結(jié)果如下:

② 輸入值不在有效范圍內(nèi)時,結(jié)果如下:

本文轉(zhuǎn)載自微信公眾號「嵌入式雜牌軍」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式雜牌軍公眾號。

 

 

責(zé)任編輯:武曉燕 來源: 嵌入式雜牌軍
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號