精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《koge (手牽手護台灣)》之銘言: : //function~~不能變動 : max()//比大小程式副程式 : { : } : ----------------------------------------- : void main() : { : int k,g,d; : k=max(1,2,4); : g=max(324,4); : d=max(1,5,3,7,5); : printf("k=%d\tg=%d\t%d"&k,&g,&d); : } : 這樣會有三個輸出 : k=4 g=324 d=7 : 大概是這樣 規定副程式不能隨著主程式而變動後面的參數 : 而主程式CALL的部分則是可以任意更改~~~請問有人寫過這個嗎 指點一下 謝謝 是像printf這種寫法嘛? 就是下面: //這個標頭檔是用來處理下面這些東西的 #include <stdarg.h> int max(int a, ...) //別忘了這裡要加... 一定是三個點 { va_list vl; //宣告一個va_list型態的變數 //作為後續變數的儲存地點 va_start(vl,a); //先以va_start初始化 //第一個參數是那個va_list變數 //第二個參數是有名字的最後一個參數名稱 //中間求值演算法略 //要取出下一個變數時: va_arg(vl,int); //用va_arg取出下一個變數 //第一個參數還是那個va_list變數 //第二個參數則是你要取出的變數的形態 //第一次使用是取出在已知名字m的第一個變數 //你要設一個終止條件 //因為這裡通常會用while()去處理每一個數值 //如果不設終止條件 會變成無窮回圈 //條件例如最後一個變數若是幾就跳出 //或是傳一個變數當做個數 //printf的例子中是用前面的字串做變數個數的判定 //要離開函式之前記得把這個變數結束掉 //不然可能有不正常的事發生 //用這個函式結束: va_end(vl); //傳那個va_list變數就可以了 //這樣就可以正常離開函式了 } 下面是Turbo C++ 3.0的例子:(//的註解是我加的) #include <stdio.h> #include <stdarg.h> //這個程式的結束條件是某個變數的值是0 /* calculate sum of a 0 terminated list */ void sum(char *msg, ...) { int total = 0; va_list ap; //宣告va_list變數 int arg; va_start(ap, msg); //起始 while ((arg = va_arg(ap,int)) != 0) { //把下一個變數丟到arg中 total += arg; //去計算和 } printf(msg, total); va_end(ap); //結束 } int main(void) { sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0); return 0; } 看不懂再問喔~ -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.32.78.221