Как работать с областью в меню в C ++ - PullRequest
0 голосов
/ 25 мая 2018

в этой программе мне нужно создать меню в консоли, пользователь помещает два массива, и он показывает им некоторые опции, связанные с ними, например, поиск их объединения и пересечения, но пока пользователь не укажет выход изздесь это меню должно работать с этими двумя массивами.

Так что я делаю пользовательский ввод, насколько большой и какие вещи идут в каждом массиве, и каждый раз, когда отображаются опции, я печатаю массивы тоже, не проблематам.

Когда пользователь выбирает выбор в меню, он вызывает функцию void () внутри main.cpp, и эта функция void вызывает функцию через aux cpp,

void conjuntos(){
cout<< "----------------------------------------"<<endl;
cout<< "                Conjuntos               "<<endl;
cout<< "----------------------------------------"<<endl;
char** opciones = new char*[6];
    opciones[0] = "Union";
    opciones[1] = "Interseccion";
    opciones[2] = "Diferencia";
    opciones[3] = "Diferencia simetrica";
    opciones[4] = "Pertenece";
    opciones[5] = "Contenido";
int opc;
//Here the user inputs each array
                            cout<<"Ingrese dos arreglos"<<endl;
                            cout<<"Arreglo 1 (cantidad): ";
                            int cant1;
                            cin>>cant1;
 int arr1[cant1];

                                    for(int i= 0;i<cant1;i++){
                                        cout<<i+1<<". ";
                                        cin>>arr1[i];
                                    };
                            cout<<"Arreglo 2 (cantidad): ";
                            int cant2;
                            cin>>cant2;
 int arr2[cant2];
                                    for(int i= 0;i<cant2;i++){
                                        cout<<i+1<<". ";
                                        cin>>arr2[i];
                                    };


do{
cout<< "----------------------------------------"<<endl;
cout<< "                Conjuntos               "<<endl;
cout<< "----------------------------------------"<<endl;

//Here the pc outputs the arrays
                             cout<<"Arreglo 1: [";
                              for(int i= 0;i<cant1;i++){
                                    if( i==cant1-1){
                                        cout<<arr1[i];
                                    }else{
                                        cout<<arr1[i]<<",";
                                    };
                              };
                                cout<<"]"<<endl;
                                cout<<"Arreglo 2: [";
                              for(int i= 0;i<cant2;i++){
                                    if( i==cant2-1){
                                        cout<<arr2[i];
                                    }else{
                                        cout<<arr2[i]<<",";
                                    };
                              };
                                cout<<"]"<<endl;
 // !!!!!
cout<< "----------------------------------------"<<endl;


  opc = menu(opciones, 6);
  switch( opc ){
    case 1: unido(); break;
    case 2: interconjunto(); break;
    case 3: diferencia(); break;
    case 4: simetrica();break;
    case 5: pertenece();break;
    case 6: contenido();break;
  };
}while(opc!=0);

cout <<" ------------------------------------------"<<endl;
cout <<"               MENU PRINCIPAL              "<<endl;
cout <<" ------------------------------------------"<<endl;
};

Когда пользователь выбирает выбор в меню, он вызывает функцию void () внутри main.cpp

 void unido(){
  cout<< "----------------------------------------"<<endl;
  cout<< "El arreglo union de ambos conjuntos es: "<<endl;
  cout<< unido(arr1,cant1,arr2,cant2);

};

И эта функция void вызывает функцию через aux cpp с помощью.h

    #ifndef CONJUNTOS_H_INCLUDED
#define CONJUNTOS_H_INCLUDED

int* unido(int* arr1,int cant1,int* arr2, int cant2);


#endif // CONJUNTOS_H_INCLUDED

Вот вспомогательный cpp

    #include <iostream>
#include "Enteros.h"
#include "Reales.h"
#include "Char.h"
#include "Conjuntos.h"

using namespace std;

int* unido(int* arr1,int cant1,int*arr2,int cant2){
    cout<<"cant1";
    return 0;
};

Мой вопрос заключается в том, что в void Kongunts () где находится меню, у меня есть массивы, мне нужноиспользовать их с каждой функциейэто меню, но когда я использую функцию, как в void unido () , он говорит, что arr1, cant1, arr2 и cant2 не указаны в функциях, как я могу отправить эти переменные из Коньюнтос ** меню над функцией ** unido ?

1 Ответ

0 голосов
/ 25 мая 2018

Я думаю, что вы должны использовать объект для хранения ваших массивов, это сделает код более понятным, и, как уже упоминалось, посмотрите на std :: vector / (std :: array) / std :: string: после того, как вы научитесьиспользуйте их, вы увидите, что они обеспечивают очень хороший уровень абстракции.

Затем, если вы хотите, чтобы объект был изменен функцией1 и использовался функцией2, в C ++ вы можете сделать:

void function1(MyObject & o) {...}
void function2(MyObject const & o) {...}

int main() {

    MyObject o;
    function1(o); // function1 must take the object by reference to be able to modify it.
    function2(o); // function2 can take the object by const reference if no modification is required.

    return 0;
}

В качестве альтернативы вы также можете создать объект и вернуть его первой функцией, например:

MyObject function1() {...}
void function2(MyObject const & o) {...}

int main() {

    MyObject o = function1();
    function2(o); // function2 can take the object by const reference if no modification is required.

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...