※ 引述《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