2017-05-07 10 views
1

私はテンプレートを勉強し、私はあなたがこのコードを起動すると、最後にpが5なぜ私のプログラムは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; 
} 

であり、私にはない最大の要素< 0しかし、関数の戻り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; 
} 

を検索する必要があります私がここに書かなければならないものを知っている。どのような詳細にこのサイトが必要ですか?ループ

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

最後の時間で

+4

このコードは "C with templates"のように見えますが、C++に似ていません。 – Walter

+0

'i ' i BLUEPIXY

答えて

2

実行された場合、あなたが

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

が、arr_help[a]を比較するには設定されていないと、おそらくarr_helpの配列の範囲を超えているんでした。それは何かを含むかもしれないので、p = aを設定します。

+0

ありがとうございます! \t 「i i

関連する問題