精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《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 ^>^ 龍龍