2012-03-26 3 views
-1

問題文: 与えられた整数のシーケンス。連続する5つの要素のグループごとに、 (1..5,6.10.10など)は最小値を見つけて別の配列に入れます(最初の配列からの長さは、 です)。 5要素のシーケンスへのポインタを取得する関数を使用し、結果を格納する整数へのポインタを ポインタで指定します。配列はメモリを必要としません。

void main() 
{ 
int n1,i,z,k; 
int v[50],x[10]; 

printf("length of array:"); 
scanf("%d" , &n1); 

k = -1; 

readArray (n1, v); 
for (i=0; i<=n1; i++) 
{  
    searchArray (&k, &v[i], &x[k]); 
} 
writeArray (k , x); 
} 

v [i]は結果の配列であり、x [k]は得られた配列であり、kは結果を入れる場所です。

void searchArray (int *k, int * v, int * x) 
{ 

int i,z; 
bool dif; 

dif = false; 
z = z+1; 
if (v[i-1] == (v[i]-1)) 
{ 
    dif = true; 
    if ((dif == true) && (z == 4)) 
    { 
     *k = *k+1; 
     x[*k] = v[i-4]; 
     z = 0; 
     if (v[i]+1 == v[i+1]) 
     { 
      i = i+1; 
     } 
    } 
} 
else if (dif != true) 
    { 
     z = 0; 
    } 
} 

問題:1から10までのアレイの結果は、x [0] = 134513473 X [1] = 6、iはXを見れば[-1] 1を置くのように代わりに1です。 x [0]ではx [-1]に、x [0]はメモリアドレスを返します。

+1

AH、[タグ:宿題]! ** plz-send-me-teh-codez ** – karlphillip

+0

報告する特定の問題がある場合は、新しい質問に戻ってください。 plz-send-me-teh-codezの種類の質問は私たちのサイトに適合しません。 – karlphillip

答えて

1

一つの問題は、ラインです:

z = z+1; 

あなたは何にもzを初期化していないので、その後zを使用して、すべてがごみを使用しています。あなたの次の行は次のとおりです。初期化されてい

if (v[i-1] == (v[i]-1)) 

iので、あなたは再びゴミを処理しています。幸せな状態ではありません。

正しく設計するには、関数にはkが引数として必要ありません。ただし、配列内の正しいオフセットを渡すには、呼び出しを変更する必要があります。 (現時点では、0..4,5.9,10.14の代わりに0..4,1.5.5,6.6をスキャンしています)

関連する問題