2017-06-09 23 views
-3

Im Aufbau dieses Subnetz-Rechner aber jetzt bin ich fest, mit Array. Ich möchte neue int-Funktion erstellen, die Array zurückgibt, aber ich weiß nicht, wie ich viele Dinge ausprobiert habe, aber immer noch keine Idee, denke, dass es etwas mit Zeigern tun muss. Ich möchte eine neue Funktion erstellen, die bei "while (octet4> 0)" beginnt. also oktet4 wird in Funktion übergeben und Funktion sollte voll funktionsfähige Array zurückgeben, die ich dann in main verwenden kann. Hoffe, jemand wird wissen, Antwort für was ich suche, Hoffnung Lösung wäre nicht zu kompliziert, weil ich nur lernen Programmierung und dachte, das wäre Spaß Projekt zu übernehmen.C++, Rückgabe-Array von Funktion

int main() { 
int i=0,j,q,s,size=8,temp; 
int binary_ip[8]; 
int netmask; 
int mask; 
int octet1, octet2, octet3, octet4; 
string ip; 
cout<<"Vnesite IP naslov, npr. 192.168.32.55:"<<endl; 
cin>>ip; 
cout<<"Vnesite netmasko, npr. /27:"<<endl; 
cin>>netmask; 

stringstream stream(ip); 
char ch; 
stream >> octet1 >> ch >> octet2 >> ch >> octet3 >> ch >> octet4; 


while(octet4>0){ 
    binary_ip[i]=octet4%2; 
    i++; 
    octet4=octet4/2; 
} 

switch(i){ 
    case 7:binary_ip[7]=0; 
    break; 
    case 6:for(s=6;s<=7;s++)binary_ip[s]=0; 
    break; 
    case 5:for(s=5;s<=7;s++)binary_ip[s]=0; 
    break; 
    case 4:for(s=4;s<=7;s++)binary_ip[s]=0; 
    break; 
    case 3:for(s=3;s<=7;s++)binary_ip[s]=0; 
    break; 
    case 2:for(s=2;s<=7;s++)binary_ip[s]=0; 
    break; 
    case 1:for(s=1;s<=7;s++)binary_ip[s]=0; 
    break; 
} 

for(q=0;q<size/2;q++){ 
    temp=binary_ip[size-1-q]; 
    binary_ip[size-1-q]=binary_ip[q]; 
    binary_ip[q]=temp;} 

return 0; 
} 
+0

Willkommen Überlauf zu stapeln. Bitte nehmen Sie sich die Zeit, [The Tour] (http://stackoverflow.com/tour) zu lesen und beziehen Sie sich auf das Material aus der [Hilfe] (http://stackoverflow.com/help/asking), was und wie Sie können fragen Sie hier. –

+0

@renekton Was ist das für einen Schalter? – LogicStuff

+0

Sie möchten also Ihre While-Schleife in eine Funktion setzen und ein Array zurückgeben? – Tyger

Antwort

0
#include <iostream> 


int array(int octet4, int binary_ip[]); 

int main() 
{ 
    int binary_ip[6]; 
    int octet4 = 55; 
    int i = 0; 
    i = array(octet4, binary_ip);//binary_ip passes in the address of the first element in the array 
} 
int array(int octet4, int binary_ip[]) 
{ 
    int i = 0; 
    while(octet4>0) 
    { 
     binary_ip[i]=octet4%2; 
     i++; 
     octet4=octet4/2; 
    } 
    return i; 
} 

oder Sie können ein Vektor wie Daniel H verwenden

vorgeschlagen
void array(int octet4, std::vector<int> &binary_ip) 
{ 

    while(octet4>0) 
    { 
    binary_ip.push_back(octet4%2); 
    octet4=octet4/2; 
    } 

} 
int main() 
{ 
    std::vector<int> binary_ip; 
    int octet4 = 55; 
    array(octet4, binary_ip); 
} 
+0

Warum "i" eingeben, anstatt es in der Funktion zu deklarieren? –

+0

weil OP 'i' in der switch-Anweisung verwendet – Tyger

+0

@DanielH Ich könnte eine int-Funktion gemacht haben und 'i' zurückgeben und' i' in main machen, gleich der int-Funktion wie dieses 'i = array (octet4, binary_ip) ' – Tyger

1

Einige Optionen:

  • Verwendung std :: Array statt einer regelmäßigen Anordnung C. Mit diesen lässt sich einfacher arbeiten und Sie verwenden bereits die Standardbibliothek. http://www.learncpp.com/cpp-tutorial/6-15-an-introduction-to-stdarray/
  • Haben Sie Ihre Funktion füllen Sie das Array, anstatt zu erstellen und senden Sie es:

    Leere Makearray (int octet4, int binary_ip [8]);

  • Zeiger verwenden, Array mit "new" zuweisen und mit "delete" freigeben. Sie müssen jedoch die Größe des Arrays kennen.
+0

Ich denke nicht, dass Ihre zweite Option kompiliert werden würde, wenn Sie sie nicht zu einem Verweis (oder "int" -Zeiger) machen würden, es sei denn, der Array-zu-Zeiger-Zerfall funktioniert anders als ich denke. –

+0

es kompiliert. Obwohl die Größe im Array grundsätzlich ignoriert wird. –

+0

C-Arrays werden nie von Wert übergeben –