2017-04-17 152 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] << ", "; 
    } 
}