標題: 無意中看到的一段代碼 [打印本頁]
作者: liuyang 時間: 2012-1-3 23:20
標題: 無意中看到的一段代碼
void CmdRunning()
2 {
3 int iCmdNum = 0;
4 void (*pCmd)() = NULL;
5
6 do{
7 pCmd = NULL;
8 printf("請選擇:0. 退出;1. 新建文件;2. 打開文件;3. 保存文件\n");
9 iCmdNum = getchar();
10 fflush(stdin);
11 switch(iCmdNum){
12 case '0':
13 printf("謝謝使用,再見!\n");
14 break;
15 case '1':
16 pCmd = CreateFile;
17 break;
18 case '2':
19 pCmd = OpenFile;
20 break;
21 case '3':
22 pCmd = SaveFile;
23 break;
24 default:
25 printf("對不起,你選擇的數字不存在,請重新選擇!\n");
26 }
27 if (NULL != pCmd){
28 pCmd(); // 與“(*pCmd)();”等價
29 }
30 }while('0' != iCmdNum);
31 }
這種方式代碼雖然簡潔,但是這種形式的擴展性很差。
struct myNode
{
char cmdNum; //編號
void (*pCmdFun)(void); //存儲函數地址用的函數指針
};
//此處省略 ExitAll、CreatFile、OpenFile、Savefile函數實體的內容。
//下面是“字典”
struct myNode Cmd[]=
{
{'0' , ExitAll }, //這是一條記錄,內容為:編號 函數首地址。
{'1' , CreatFile}, //這是一條記錄,內容為:編號 函數首地址。
{'2' , OpenFile },
{'3' , SaveFile }
//以后如果要增加新的功能,只需在此增加一條“記錄”即可,格式同上。(擴展性非常高!)
};
const int Length_Of_Cmd = sizeof(Cmd)/sizeof(Cmd[1]);//自動測量結構體數組的大小(字典有多少條記錄)
void cmdRuning()
{
char cmdNum_input;
int n=0;
printf("請選擇:0. 退出;1. 新建文件;2. 打開文件;3. 保存文件\n");
cmdNum_input = getchar();
fflush(stdin);
n = (cmdNum_input - '0');
if( n>0 && n<(sizeof(Cmd) / sizeof(Cmd[0]) ) )//數據邊界檢查
{// 直接映射到回調函數
Cmd[n].pCmdFun();//本句執行字典中跟輸入的選項對應的函數
}
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲先锋影音
|
青草福利
|
国产在线视频一区二区
|
成人av电影免费在线观看
|
成人免费在线观看
|
久久久久久亚洲精品
|
亚洲午夜精品一区二区三区他趣
|
精品日韩一区
|
久久九九网站
|
五十女人一级毛片
|
2019天天干夜夜操
|
少妇一区在线观看
|
午夜免费网
|
成人妇女免费播放久久久
|
欧美成年人
|
国产精品欧美一区二区三区不卡
|
caoporn免费|
久久久久久久一区
|
欧美国产视频一区二区
|
欧美精品一区二区三区在线
|
在线激情视频
|
国产日韩精品视频
|
国产精品不卡视频
|
天堂在线网
|
欧美精品成人影院
|
在线日韩精品视频
|
成人在线免费电影
|
嫩草视频在线免费观看
|
国产精品久久久久久久久久
|
成年人在线观看视频
|
青青草华人在线视频
|
亚洲欧美视频
|
伊人伊成久久人综合网站
|
亚洲精品4
|
成人综合视频在线观看
|
精品久久久久久久久久久
|
精品一区二区三区四区
|
最新中文字幕第一页视频
|
最新中文字幕第一页视频
|
免费成人高清在线视频
|
亚洲精品一
|