参数和全局变量,菜单程序

时间:2017-03-14 18:28:47

标签: c++ variables parameters menu global

我有一个菜单驱动的程序,菜单功能需要很多参数,我希望能够从其他函数调用菜单功能,这意味着每个函数都必须有这么多参数,即使它们没有&# 39;不需要它们还是有更好的方法?交换机正在调用其他功能,这些功能都与菜单1具有相同的参数。这是代码:

void menu(int *sklad, int *Max, int *Vrh, int *sklad2, int *Rep, int *Glava){

    int izbira;

    cout << "Sklad - izbira:" << endl;
    cout << "1) Vnos podatka" << endl;
    cout << "2) Branje podatka" << endl;
    cout << "3) Izpis celotnega sklada" << endl << endl;
    cout << "Krozna vrsta - izbirta:" << endl;
    cout << "4) Vnos podatka" << endl;
    cout << "5) Branje podatka" << endl;
    cout << "6) Izpis vrste od glave do repa" << endl << endl;
    cout << "7) Konec" << endl << endl;
    cout << "Izbira: ";

    cin >> izbira;
    if(!cin){
        cout << "Vnesite celo stevilo" << endl;
        menu(sklad, Max, Vrh, sklad2, Rep, Glava);
    }

    switch(izbira){
    case 1: {
        vnosPodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 2: {
        branjePodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 3: {
        izpisSklada(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 4:{
        vnosPodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 5: {
        branjePodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 6: {
        izpisSklada2(sklad, Max, Vrh, sklad2, Rep, Glava);
        break;
    }

    case 7: {
        break;
    }

    default: {
        cout << "napaka" << endl;
        menu(sklad, Max, Vrh, sklad2, Rep, Glava);
    }
    }
}

2 个答案:

答案 0 :(得分:1)

带有捕获的lambda可以在这里提供帮助。我没有提出默认值,因为我将指针视为参数,我认为这是数据的地址。     void menu(int * sklad,int * Max,int * Vrh,int * sklad2,int * Rep,int * Glava);

auto fixedMenu = [&fixedSklad, &fixedMax, &fixedVhr, &fixedsklad2, &fixedRep](int * Glava) { menu(fixed...., Glava); });

fixedMenu(&gLava);

您可以根据需要使用尽可能多的固定参数执行这样的lambdas,以便在您方便时创建另一个函数。

我还建议使用菜单功能参数的参考,如果它们不能是nullptrconst,如果它们无法在内部更改。

答案 1 :(得分:0)

C ++是一个面向对象的程序,我建议创建一个Menu类。您可以将其设为单例,以便程序的其他部分可以对其进行修改。

Menu.h

class Menu {
      Menu(int *_sklad, int *_Max, int *_Vrh,
           int *_sklad2, int *_Rep, int *_Glava)
          : sklad(_sklad), Max(_Max), Vrh(_Vrh),
            sklad2(_sklad2), Rep(_Rep), Glava(_Glava) {}
public:
  int* sklad;
  int* Max;
  int* Vrh;
  int* sklad2;
  int* Rep;
  int* Glava;

  static Menu& sharedInstance();
  void run();
};

Menu.cpp

#include <Menu.h>

Menu& sharedInstance() {
   static Menu instance(<default instanciation>);
   return instance;
}

void Menu::run()
{
  int izbira;
  cout << "Sklad - izbira:" << endl;
  cout << "1) Vnos podatka" << endl;
  cout << "2) Branje podatka" << endl;
  cout << "3) Izpis celotnega sklada" << endl << endl;
  cout << "Krozna vrsta - izbirta:" << endl;
  cout << "4) Vnos podatka" << endl;
  cout << "5) Branje podatka" << endl;
  cout << "6) Izpis vrste od glave do repa" << endl << endl;
  cout << "7) Konec" << endl << endl;
  cout << "Izbira: ";

  cin >> izbira;
  if(!cin){
      cout << "Vnesite celo stevilo" << endl;
      menu(sklad, Max, Vrh, sklad2, Rep, Glava);
  }

  switch(izbira){
  case 1: {
    vnosPodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
    break;
  }

  case 2: {
    branjePodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
    break;
  }

  case 3: {
      izpisSklada(sklad, Max, Vrh, sklad2, Rep, Glava);
      break;
  }

  case 4:{
      vnosPodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
      break;
  }

  case 5: {
      branjePodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
      break;
  }

  case 6: {
      izpisSklada2(sklad, Max, Vrh, sklad2, Rep, Glava);
      break;
  }

  case 7: {
      break;
  }

  default: {
      cout << "napaka" << endl;
      menu(sklad, Max, Vrh, sklad2, Rep, Glava);
  }
}

然后,您可以根据需要修改实例,而不需要重复所有命令行。