2013-06-01 95 views
-1

我無法找到我的「問題」的答案。如何填充va_list

我創建了一個函數,它接受不同數量的整數('findMinVal(int x,...)')並返回所有調用中的最小數字。現在我的程序直接通過代碼獲取的參數:

int main(){ 

printf("\nThe minimal number in each call for \"findMin\" is : \n"); 


findMinVal(90,78,5,20,-1); 
findMinVal(70,40,2,-1); 
findMinVal(40,30,-1); 

return 0; 

}/* main */ 

我想它接受來自文件中的變量,但我不知道我該怎麼做..? 任何幫助,將不勝感激。

+0

您不能手動填充'va_list'。 –

+0

重複的問題:http://stackoverflow.com/questions/988290/populating-a-va-list。簡而言之,這是一個糟糕的主意,你應該使用類似動態構建的int數組與計數器(即在readFile中:構建數組,計數項目並將計數和數組指針傳遞給您的findMinVal()函數。 – wldsvc

+0

It看起來像最小值是'-1',否?; v) – Potatoswatter

回答

1

製作可變參數列表的唯一標準方法是對接受它一次傳遞所有參數的函數進行調用。

findMinValInArray(int n, int a[]) { 
    switch(n) { 
     case 1: return findMinVal(a[0], -1); 
     case 2: return findMinVal(a[0], a[1], -1); 
     case 3: return findMinVal(a[0], a[1], a[2], -1); 
     case 4: return findMinVal(a[0], a[1], a[2], a[3], -1); 
     case 5: return findMinVal(a[0], a[1], a[2], a[3], a[4], -1); 
     case 6: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], -1); 
     case 7: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], -1); 
     case 8: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], -1); 
     case 9: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], -1); 
     case 0xA: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], a[9], -1); 
     case 0xB: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], a[9], a[0xA], -1); 
     case 0xC: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], a[9], a[0xA], a[0xB], -1); 
     case 0xD: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], a[9], a[0xA], a[0xB], a[0xC], -1); 
     case 0xE: return findMinVal(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 
      a[8], a[9], a[0xA], a[0xB], a[0xC], a[0xD], -1); 
    } 
} 

無論如何,如果可能的話應該避免可變參數。

+0

+1笑。 – Potatoswatter

0

雖然您可以使用Vovanium所述的varargs,但將findMinVal函數更改爲接受數組會更好。例如:

int findMinVal(size_t length, int * values){ 
    /* Find minimum value... 
     (Hint: start with min = values[0] and the loop iterator with 1) */ 
} 

然後調用它像這樣:

/* allocate values and fill it */ 
int min = findMinVal(length, values);