※ 引述《Keiichi.bbs@ptt.csie.ntu.edu.tw (美可的長髮帥哥)》之銘言:
: 不過你使用選單而不用switch似乎不是明智之舉ㄝ..
: 降不就要用一堆if-else...
: 還是有別的方法判斷使用者的輸入勒... -_-?
如果規定不能用 switch 的話﹍scan code 對應到 function pointer array
如何?
速度應該蠻快的
--
★ Origin:
︿︱︿ 小魚的紫色花園
﹀ fpg.m4.ntu.edu.tw (140.112.214.200)
> -------------------------------------------------------------------------- <
作者: DickG (龍龍) 看板: C_and_CPP
標題: Re: 用c來做一個選單!
時間: Tue May 18 20:55:26 1999
※ 引述《BigMac.bbs@fpg.m4.ntu.edu.tw (我是河馬)》之銘言:
: ※ 引述《Keiichi.bbs@ptt.csie.ntu.edu.tw (美可的長髮帥哥)》之銘言:
: : 不過你使用選單而不用switch似乎不是明智之舉ㄝ..
: : 降不就要用一堆if-else...
: : 還是有別的方法判斷使用者的輸入勒... -_-?
: 如果規定不能用 switch 的話﹍scan code 對應到 function pointer array
: 如何?
: 速度應該蠻快的
^>^ 正想要回覆時…沒想到被"大麥克"搶先了呀… ^^
我先舉一個簡化版的例子:
先定義個 struct
typedef struct keyMap{
char key;
void (*func)(void);
}keymap_t;
再自行分別寫一些 function 來就對應的 key 實作
於 main 中
void main()
{
keymap_t menu[] = { {'a', funcA},
{'b', funcB},
{'c', funcC}};
// funcA, funcB, funcC 事先寫好
while(cin>>ch)
{
for(i=0; i<3; i++)
if(ch == menu[i].key)
menu[i].func();
}
}
龍龍
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: DickG.m5.ntu.ed
> -------------------------------------------------------------------------- <
作者: DickG (龍龍) 看板: C_and_CPP
標題: Re: 用c來做一個選單!
時間: Tue May 18 21:01:36 1999
※ 引述《BigMac.bbs@fpg.m4.ntu.edu.tw (我是河馬)》之銘言:
: ※ 引述《Keiichi.bbs@ptt.csie.ntu.edu.tw (美可的長髮帥哥)》之銘言:
: : 不過你使用選單而不用switch似乎不是明智之舉ㄝ..
: : 降不就要用一堆if-else...
: : 還是有別的方法判斷使用者的輸入勒... -_-?
: 如果規定不能用 switch 的話﹍scan code 對應到 function pointer array
: 如何?
: 速度應該蠻快的
又如依 BigMac 所設的以 scan code 來作對應的話,那我想到的有兩個機制
1、寫個轉換個機制來將 scan codes 對應到 sequencial increasing index
(如此一來不會有一些"漏洞",如只需要對 a, d, f, 處理的話就不會有
b, c, e 的這些"空對應")。
優點:能控制要配制多少個 function pointer array
缺點:經過一層轉換…慢了點。
2、直接給他作 mapping。
優點:快呀… ^^
缺點:如所要作 mapping 的 scan codes 分佈太廣,則有浪費 function pointer
array 之嫌。
目前想到了一個更好的方法,採用 STL 中的 map 來作處理,如此一來既能以非 integer
的數值來當 index ,又能產生一 sequencial increasing index ,即能最佳的利用
memory. good ^>^
龍龍