2017-05-07 73 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

相关问题