2017-04-17 65 views
-3

我在寫一個菜單驅動的程序。情況1生成一個隨機數組,情況4關閉情況1的數組。在函數izpis中,我只想要數組,但是當我聲明int *zap = generiraj1(size2);時,調用整個函數,並要求用戶再次輸入大小。我試圖用指針克服這個障礙,使用更多的函數,使用不同的參數,我似乎無法弄清楚。從函數獲取返回值而不執行函數的其餘部分?

#include <iostream> 
#include <ctime> 
#include <cstdlib> 

using namespace std; 


int *generiraj1(int size2); 
void izpis(int size2); 

int main() { 

    int size2 = 0; 

    while(true) { 

     cout << "Hitro uredi - izbira:" << endl << endl; 
     cout << "1) Generiraj nakljucno zaporedje" << endl; 
     cout << "2) Generiraj narascajoce zaporedje" << endl; 
     cout << "3) Generiraj padajoce zaporedje" << endl; 
     cout << "4) Izpis zaporedja" << endl; 
     cout << "5) Preveri ali je zaporedje urejeno" << endl; 
     cout << "6) Uredi s hitrim urejanjen brez mediane" << endl; 
     cout << "7) Uredi s hitrim urejanjem z mediano" << endl; 
     cout << "8) Uredi z drugim alogritmom za urejanje" << endl; 
     cout << "9) Konec" << endl; 

     int izbira; 
     cin >> izbira; 

     switch(izbira) { 

     case 1: { 
      generiraj1(size2); 
      break; 
     } 

     case 4: { 
      izpis(size2); 
      break; 
     } 

     case 9: { 
      break; 
     } 
     } 


    } 
} 

int *generiraj1(int size2) { 

    cout << "Velikost?" << endl; 

    cin >> size2; 

    srand(time(NULL)); 

    int *zap2 = new int[size2]; 

    for(int i=0; i<size2; i++) { 
     zap2[i]=rand()%100+1; 
    } 

    return zap2; 
} 


void izpis(int size2) { 
    int *zap = generiraj1(size2); 

    for(int i=0; i<size2; i++) { 
     cout << zap[i] << ", "; 
    } 
} 
+0

您可以使用if語句當u希望它 –

+0

例如,僅執行,您可以通過另一種說法,告訴功能是否需要詢問用戶 –

+0

謝謝!所以沒有辦法從函數中獲取返回值而不調用整個身體? –

回答

0

你可以把它分成兩個功能是這樣的:

int getInput() 
{ 
    std::cout << "Velikost?" << std::endl; 
    int size2; 
    std::cin >> size2; 

    return size2; 
} 

int *generiraj1(int size2) 
{ 
    srand(time(NULL)); 
    int *zap2 = new int[size2]; 

    for (int i = 0; i<size2; i++) 
     zap2[i] = rand() % 100 + 1; 

    return zap2; 
} 

和izpis,使ZAP常量和靜態所以價值只能設置一次:

void izpis(int size2) 
{ 
    const static int *zap = generiraj1(size2); 

    for(int i=0; i<size2; i++) 
     cout << zap[i] << ", "; 
} 

和使用它是這樣的:

generiraj1(getInput()); 
izpis(getInput()); 
+0

是的,但在函數「izpis」輸出數組生成「generiraj1」,我需要調用函數「generiraj1」這將作出一個新的陣列,但我需要每一次相同 –

+0

使int * zap = generiraj1(size2);常量和靜態,所以它只能設置一次? –

-2

如果有人是w這就是我解決這個問題的方法,我添加了一個全局指針並解決了這個問題。

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
using namespace std; 

int *generiraj1(int *size2); 
void izpis(int size2); 

int size2 = 0; 
int *pointer; 

int main() { 







    while(true){ 

    cout << "Hitro uredi - izbira:" << endl << endl; 
    cout << "1) Generiraj nakljucno zaporedje" << endl; 
    cout << "2) Generiraj narascajoce zaporedje" << endl; 
    cout << "3) Generiraj padajoce zaporedje" << endl; 
    cout << "4) Izpis zaporedja" << endl; 
    cout << "5) Preveri ali je zaporedje urejeno" << endl; 
    cout << "6) Uredi s hitrim urejanjen brez mediane" << endl; 
    cout << "7) Uredi s hitrim urejanjem z mediano" << endl; 
    cout << "8) Uredi z drugim alogritmom za urejanje" << endl; 
    cout << "9) Konec" << endl; 

    int izbira; 
    cin >> izbira; 

    switch(izbira){ 

    case 1: { 
     generiraj1(&size2); 
     break; 
    } 

    case 4:{ 
     izpis(size2); 
     break; 
    } 

    case 9:{ 
     break; 
    } 
    } 


    } 
} 

int *generiraj1(int *size2){ 

    cout << "Velikost?" << endl; 


    int size; 
    cin >> size; 
    *size2=size; 

    srand(time(NULL)); 

    int *zap2 = new int[*size2]; 

    for(int i=0; i<*size2; i++){ 
     zap2[i]=rand()%100+1; 
    } 

    pointer = zap2; 

    *size2=size; 


    return zap2; 


} 


void izpis(int size2){ 

    for(int i=0; i<size2; i++){ 
     cout << pointer[i] << ", "; 
    } 
}