[問題] 函數中參數個數

看板C_and_CPP作者 (呆凜)時間10年前 (2014/05/16 22:42), 10年前編輯推噓4(408)
留言12則, 7人參與, 最新討論串1/1
想請問一下,假設現在有個函數, 我設定他最多的參數個數是 4 個, 但其實每次用到這函數的時候參數設定個數不一定,1~4個都有可能, 請問有沒有辦法知道確切個數是幾個? 陣列個數我知道可以用 sizeof 但函數參數估狗找到的幾乎都說不定參數沒辦法準確知道。 舉個例子,像是有個骰子,我請人丟,可以丟1~4次, 根據丟的次數和值,有一套算法來計算每個人的結果並輸出。 void database() { throw(1,4,6); throw(2,2); throw(6,3,1,5); throw(5); } void throw(char data1, char data2, char data3, char data4) { 先取得這次丟的次數; switch(次數) { case 1: 計算方式1; //maybe data1*404 break; case 2: 計算方式2; //maybe data1*203 + data2*200 break; case 3: 計算方式3; //maybe data1*150 + data2*130 + data3*122 break; case 4: 計算方式4; //maybe data1*99 + data2*100 + data3*101 + data4*102 break; default: break; } 輸出計算結果; } 請問有解嗎??卡住好幾天了@_@ 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.110.101.25 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1400251365.A.0A4.html ※ 編輯: dailiner (123.110.101.25), 05/16/2014 22:43:17

05/16 22:56, , 1F
C++ 的話用預設參數或多載就解了, C 可能要用 va_list
05/16 22:56, 1F

05/16 23:00, , 2F
是c @@
05/16 23:00, 2F

05/16 23:00, , 3F
C 的 va_list 需要額外參數幫助才行
05/16 23:00, 3F

05/16 23:00, , 4F
這個額外參數可以是個數, 也可以是結尾值
05/16 23:00, 4F

05/16 23:15, , 5F
如果參數都是同一個型態的變數,傳一個指標(或陣列)再
05/16 23:15, 5F

05/16 23:16, , 6F
加上參數的個數,這樣可行嗎?
05/16 23:16, 6F

05/16 23:36, , 7F
我試試看~ 謝謝各位~!
05/16 23:36, 7F

05/16 23:38, , 8F
傳struct { char data[4]; int size; }
05/16 23:38, 8F

05/17 05:55, , 9F
用巨集來輔助(參考這討論 http://ppt.cc/zg4Y
05/17 05:55, 9F

05/17 11:59, , 10F
謝謝 我試試看~!
05/17 11:59, 10F

05/19 02:49, , 11F
沒人覺得原PO真正的解法是用多載嗎?
05/19 02:49, 11F

05/19 06:55, , 12F
那個, 原 PO 在二樓推了是 C 不是 C++...
05/19 06:55, 12F
文章代碼(AID): #1JTYFb2a (C_and_CPP)