編程意識(shí)——將字符串與功能宏進(jìn)行綁定
編 者 悟 語
對(duì)于事的打算,永遠(yuǎn)都不要認(rèn)為別人考慮的過多,經(jīng)事的你可能才會(huì)發(fā)現(xiàn),不是別人想得太多,而是你想得太少。(思考是一種習(xí)慣,而不是一種負(fù)擔(dān))
文 章 導(dǎo) 讀
今天給小伙伴們帶來一段簡(jiǎn)短的代碼,簡(jiǎn)短但精致,將字符串與功能宏進(jìn)行綁定,這樣做的好處是調(diào)整代碼比較方便,掌握后你就會(huì)明白什么才是結(jié)構(gòu)清晰,閱讀過程中如果有什么問題,可以后臺(tái)留言哈。
1 代碼原理說明
利用switch和case的散轉(zhuǎn)功能,宏作為散轉(zhuǎn)條件,每一個(gè)宏對(duì)應(yīng)一種功能,將宏和字符串進(jìn)行綁定,這樣通過比較字符串的方式,就能獲得對(duì)應(yīng)宏的功能代碼。
此代碼的好處是宏代碼不用變的情況下,字符串和功能宏的對(duì)應(yīng)是可以根據(jù)需要進(jìn)行隨意調(diào)整的。
代碼結(jié)構(gòu)清晰,易于維護(hù)。
2 實(shí)現(xiàn)源碼
1)實(shí)現(xiàn)代碼
一切說明,盡在注釋中啦!代碼可以理解為等級(jí)評(píng)定吧,實(shí)際意義不大,大家多關(guān)注這個(gè)小代碼的結(jié)構(gòu)吧!
- #include <stdio.h>
- #include <stdlib.h>
- // 功能宏散轉(zhuǎn)編號(hào)
- #define ONE_STAR 1
- #define TWO_STAR 2
- #define THREE_STAR 3
- #define FOUR_STAR 4
- #define FIVE_STAR 5
- #define ZERO 0 // 無效輸入返回值
- /* 定義查找對(duì)應(yīng)表結(jié)構(gòu)及查找表數(shù)組 */
- static struct lookuptable
- {
- char *str; // 指向字符串
- int code; // 對(duì)應(yīng)宏功能碼
- }tab[]= {
- // 字符串口與功能指示紅的對(duì)應(yīng)表,可以根據(jù)需要隨意調(diào)整,下面的1-5可以換為任意字符串,只是輸入時(shí)(查找時(shí))也要一一對(duì)應(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í)進(jìn)行處理,這里就是簡(jiǎ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)行星級(jí)打印
- 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時(shí),結(jié)果如下:
② 輸入值不在有效范圍內(nèi)時(shí),結(jié)果如下:
本文轉(zhuǎn)載自微信公眾號(hào)「嵌入式雜牌軍」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系嵌入式雜牌軍公眾號(hào)。