2016-04-12 12 views
-1

私は、ユーザー入力を介して配列を作成し、次に新しい関数で配列を作成して偶数要素のみからなる別の配列を作成し、結果をポインタを介して返さなければならないプログラムを作成するタスクがあります。新しく作成された配列C++の関数から変更して返す

私はちょうどC++を学び始めたことを覚えておいてください。ここでのポインタは現実的ではありません。

#include <iostream> 
using namespace std; 

int* getEven(int *niz, int *n) 
{ 
    int i; 

    for(i = 0 ; i < *n ; i++) 
    { 
     if(niz[i] % 2 == 0) 
      cout << niz[i]; 
    } 
} 

int main() 
{ 
    int n, i; 
    int *niz; 

    cout << "Enter positive and larger number than 50: "; 
    cin >> n; 

    if(n <= 50) 
     cout << n; 
    else 
    { 
     cout << "Error. Number is lower than 50." << endl; 
     abort; 
    } 

    niz = new int[n]; 

    for(i = 0 ; i < n ; i++) 
    { 
     cout << "Enter next element:" << endl; 
     cin >> niz[i]; 
    } 

    int *a = getEven(niz, n); 

    cout << endl; 
    cout << a[0] << endl; 

    system("pause"); 
    return 0; 
} 
+0

あなたのエラーが何であるかを述べることによって開始することができますが、開始するには、 'abort'だけでどこにも定義されていない、そしてgetEvenのための 'N'パラメータが' intで* ''あなたは 'int'を与え、この2つのエラーを修復すると、コードはコンパイルされるべきです – Guiroux

+0

私が提案した関数を使ってみましたか? –

答えて

0

あなたが最初の1からすべての要素が含まれていない可能性があります新しい配列を作成しようとしている場合は、新しい配列の要素数を追跡するために追加のパラメータを必要としています。ここではあなたがそれを行う方法です。

int* getEven(int *inputArray, int inputLength, int *outputLength) 
{ 
    int *outputArray = new int[inputLength]; 
    *outputLength = 0; 

    for(int i = 0; i < inputLength; i++) 
    { 
     if(inputArray[i] % 2 == 0) 
     { 
      outputArray[*outputLength] = inputArray[i]; 
      outputLength++; 
     } 
    } 

    return outputArray; 
} 

そして、ここではメインでそれを使用する方法の例です:

int outLen = 0; 
int *a = getEven(niz, n, &outLen); 

for(i = 0; i < outLen; i++) 
    cout << a[i] << endl; 

また、手動で動的に割り当てられた配列を削除する必要があります念頭に置いてクマメモリリークを防止します。これは、main関数で作成された配列にも適用されます。そのため、あなたはこれを実行する必要があります。

delete []niz; 
delete []a; 
+0

@ abhishek_naik "その後、偶数要素だけで構成される別の配列を作成する新しい関数" –

+0

あなたは何を言っているのですか?Iと同じことをやっています。新しい配列を作成し、 1。 –

関連する問題