編程意識——將字符串與功能宏進(jìn)行綁定
作者:釜薪君
利用switch和case的散轉(zhuǎn)功能,宏作為散轉(zhuǎn)條件,每一個宏對應(yīng)一種功能,將宏和字符串進(jìn)行綁定,這樣通過比較字符串的方式,就能獲得對應(yīng)宏的功能代碼。
編 者 悟 語
對于事的打算,永遠(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)吧!
- #include <stdio.h>
- #include <stdlib.h>
- // 功能宏散轉(zhuǎn)編號
- #define ONE_STAR 1
- #define TWO_STAR 2
- #define THREE_STAR 3
- #define FOUR_STAR 4
- #define FIVE_STAR 5
- #define ZERO 0 // 無效輸入返回值
- /* 定義查找對應(yīng)表結(jié)構(gòu)及查找表數(shù)組 */
- static struct lookuptable
- {
- char *str; // 指向字符串
- int code; // 對應(yīng)宏功能碼
- }tab[]= {
- // 字符串口與功能指示紅的對應(yīng)表,可以根據(jù)需要隨意調(diào)整,下面的1-5可以換為任意字符串,只是輸入時(查找時)也要一一對應(yīng)上
- {"1", ONE_STAR},
- {"2", TWO_STAR},
- {"3", THREE_STAR},
- {"4", FOUR_STAR},
- {"5", FIVE_STAR}
- };
- // 查找函數(shù)聲明
- SearchFunc(char *s);
- int main(int argc, char *argv[])
- {
- int score = 0;
- char str[10] = "\0";
- printf("Please input number 1-5 to evaluate: ");
- gets(str);
- // 根據(jù)星級進(jìn)行處理,這里就是簡單的賦值,實(shí)際應(yīng)用中可以根據(jù)需要更多
- switch(SearchFunc(str))
- {
- case ONE_STAR:
- {
- score += 1;
- break;
- }
- case TWO_STAR:
- {
- score += 2;
- break;
- }
- case THREE_STAR:
- {
- score += 3;
- break;
- }
- case FOUR_STAR:
- {
- score += 4;
- break;
- }
- case FIVE_STAR:
- {
- score += 5;
- break;
- }
- case ZERO: // 無效的情況,打印無效提升
- {
- printf("\nYour input is invaild!\n");
- break;
- }
- }
- // 輸入有效才進(jìn)行星級打印
- if(SearchFunc(str)!=ZERO)
- {
- printf("\nThe score is: %d\n",score);
- }
- return 0;
- }
- /* 宏功能查找函數(shù) */
- SearchFunc(char *s)
- {
- int i;
- for(i=0; i< sizeof(tab)/sizeof(tab[0]); i++)
- {
- if(strcmp(tab[i].str, s)==0)
- {
- return tab[i].code;
- }
- }
- 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é)任編輯:武曉燕
來源:
嵌入式雜牌軍