2016-04-12 6 views
-1

Ich habe eine Aufgabe, ein Programm zu erstellen, Array über Benutzereingabe macht und dann in neue Funktion ein anderes Array zu erstellen, die nur aus geraden Elementen besteht und dann das Ergebnis über Zeiger zurückgegeben werden soll das neu erstellte Array.Ändern und Rückkehr von einer Funktion in C++

Denken Sie daran, dass ich gerade angefangen habe zu lernen C++ so Zeiger hier sind nicht vor Ort.

#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

Sie sagen, was Ihre Fehler beginnen könnte, aber zu starten, wird die 'abort' einfach nicht überall definiert ist, dann' n' Parameter für getEven ist ein 'int * 'und du gibst ihr ein' int', reparierst diese 2 Fehler, der Code sollte kompilieren – Guiroux

+0

Hast du versucht, die Funktion zu verwenden, die ich vorgeschlagen habe? –

Antwort

0

Wenn Sie ein neues Array zu erstellen beabsichtigen, die nicht alle Elemente aus dem ersten enthalten könnte, müssen Sie einen zusätzlichen Parameter Überblick über die Anzahl der Elemente in der neuen Anordnung zu halten. Hier ist, wie Sie es tun:

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; 
} 

Und hier ist ein Beispiel dafür, wie es in Haupt verwenden:

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

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

Auch, denken Sie daran, dass Sie benötigen, um manuell die dynamisch zugewiesenen Arrays löschen um Speicherlecks zu verhindern. Dies gilt auch für das Array, das in der main-Funktion erstellt wurde. Daher müssen Sie, dies zu tun:

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

@abhishek_naik "dann in neuer Funktion, um ein anderes Array zu erstellen, das nur aus geraden Elementen besteht" –

+0

Worüber reden Sie, Sie tun dasselbe wie ich. Ein neues Array erstellen und sogar Elemente aus dem alten kopieren ein. –

Verwandte Themen