2017-05-07 115 views
1

我學習的模板,我必須尋找最大元素< 0。但函數返回5.爲什麼我的程序返回5?

#include <stdio.h> 
#include <stdlib.h> 
#include <ctime> 

template <class Tdata, class Tnumber> 
Tnumber min_max (Tdata arr[], Tnumber n) 
{ 
    int i, p = 0,max_el=0; 
    int a=0; 
    Tdata arr_help[n]; 
    for (i=0; i<n; i++){ 
     if (0 > arr[i]){ 
      arr_help[a]=arr[i]; 
      printf("\n a = %i \n",a); 
      a++; 
     }; 
     printf("\narr_help = %i\n",arr_help[i]); 
    } 
    for (i=0;i<a;i++){ 
     printf("\n p = %i \n",p); 
     if(arr_help[p]<arr_help[i+1]) p=i+1; 
    } 
    printf("\n p_bf_answr = %i \n",p); 
    return p; 
} 

如果你開始這個代碼頁末是5

int main(){ 
    srand(time(0)); 
    int n=5, arr_int[n],i; 
    //float arr_float[n]; 
    printf("\n"); 
    for (i=0;i<n;i++){ 
     arr_int[i]=(int)(-(rand()%11 +1)); 
    } 
    printf("\nint_min = %i\n",(min_max(arr_int,n))); 
    /* for (i=0;i<n;i++){ 
     arr_float[i]=(float)(-(rand()%10)); 
    } 
    printf("\nfloat_min = %i\n",((int)min_max(arr_float,n)));*/ 
    return 0; 
} 

而且我不知道,我必須寫在這裏。什麼細節需要這個網站?

+4

此代碼看起來像「C with templates」,但不像C++。 – Walter

+0

'i '我 BLUEPIXY

回答

2

在最後一次循環

for (i=0;i<a;i++){ 
    printf("\n p = %i \n",p); 
    if(arr_help[p]<arr_help[i+1]) p=i+1; 
} 

如果執行你比較

if(arr_help[p]<arr_help[a]) p=a; 

arr_help[a]從未設置過,是有可能超越arr_help數組邊界。它可能包含任何內容,因此設置p = a。

+0

謝謝! \t 「i

相關問題