Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
joaotavares

Menus

Recommended Posts

joaotavares

include <iostream>

using namespace std;

main()

{

  int n;

  cout << "1.Gerir" << endl << "2." << "3.Sair" << endl;

  cin >> n;

 

  switch (n){

    case 1:

      int a;

      cout << "1.Inserir " << endl << "2.Remover " << endl << "3.Editar" << endl << "4.Sair" << endl;

      cin >> a;

      switch (a){

case 1:

case 2:

case 3:

case 4:

  break;

   

      }

break;

    case 2:

     

      break;

     

    case 3:

     

      break;

   

      }

     

}

Boa tarde estou a criar uns menus em c++, A minha dúvida é quando passo de um menu para outro como e que faço para voltar ao anterior

Share this post


Link to post
Share on other sites
Baderous

Tens de envolver isso num ciclo do...while. Tens aqui um exemplo em C onde podes ver como se faz:

#include <stdio.h>

void menu1(void) {
        int op;
        do {
                printf("1 - Sub-opcao 1\n");
                printf("2 - Sub-opcao2\n");
                printf("0 - Retroceder\n");
                printf("\nIntroduza a opcao: ");
                scanf("%d",&op);
                scanf("%*c");
                switch (op) {
                        case 1: printf("Escolheu a sub-opcao 1.\n");
                                break;
                        case 2: printf("Escolheu a sub-opcao2.\n");
                                break;
                        case 0: break;
                        default: printf("Opcao invalida!\n");
                }
        } while (op!=0);
}

int main(void) {
        int op;
        do {
                printf("-- MENU --\n");
                printf("1 - Opcao 1\n2 - Opcao 2\n3 - Opcao 3\n0 - Sair\n");
                printf("\nIntroduza a opcao: ");
                scanf("%d",&op);
                scanf("%*c");
                switch(op) {
                        case 1: menu1();
                                break;
                        case 2: printf("Escolheu a opcao2.\n");
                                break;
                        case 3: printf("Escolheu a opcao3.\n");
                                break;
                        case 0: break;
                        default: printf("Opcao invalida.\n");
                }
       } while (op!=0);
        printf("Fim!\n");
        return 0;
}

Share this post


Link to post
Share on other sites
joaotavares

obrigado

#include <iostream>

using namespace std;

void menu2(){		
	int a;
	cout << "1.Geral"<< endl << "2.Renovaveis" << endl << "3.Nao Renovaveis" << "4.Sair"<< endl;
	cin >> a;
	switch (a){
			case 1:
			break;

			case 2: menu5();
			break;

			case 3: menu6();
			break;

			case 4: menu();
			break;
		  }
	}	

void menu3(){
	  int b;
	  cout << "1.Geral"<< endl << "2.Renovaveis" << endl << "3.Nao Renovaveis" << "4.Sair"<< endl;
	  cin >> b;
	  switch (b){
			case 1:
			break;

			case 2: menu7();
			break;

			case 3: menu8();
			break;

			case 4: menu();
			break;
		  }

void menu5(){
	  int c;
	  cout << "1.Barragem" << endl << "2.Parque Eolico" << endl << "3.Sair" << endl;
	  switch (c){
		  case 1:
		  break;

		  case 2:
		  break;

		  case 3: menu2();
		  break;
		}

	}

void menu6(){
	  int d;
	  cout << "Carvao " << endl << "Petroleo" << endl << "Sair" << endl;
	  cin >> d;
	  switch (d){
		  case 1:
			break;

		  case 2:
			break;

		  case 3: menu2();
		  break;

		}

  }

void menu7(){
	  int e;
	  cout << "1.Barragem" << endl << "2.Parque Eolico" << endl << "3.Sair" << endl;
	  switch (e){
		  case 1:
		  break;

		  case 2:
		  break;

		  case 3: menu3();
		  break;
		}

	}

void menu8(){
	  int d;
	  cout << "Carvao " << endl << "Petroleo" << endl << "Sair" << endl;
	  cin >> d;
	  switch (d){
		  case 1:
			break;

		  case 2:
			break;

		  case 3: menu3();
		  break;
		}
  }

main(){
		int n;
		cout << "1.Gerir" << endl << "2.Dados sobre produção, consumo e perdas" << endl << "3.Oscilações produção e consumo" << endl << "4.Consumidoress" << endl << "5.Sair" << endl;
		cin >> n;
		switch (n){
				case 1: menu1();
				break;

				case 2: menu2();
				break;

				case 3: menu3();
				break;

				case 4: menu4();
				break;
				}
}

Eu fiz assim mas quando vou a compilar dize me que as funções não estão definidas.

Share this post


Link to post
Share on other sites
Mineiro

Eu tenho aqui uma classe menu que te iria simplificar esse código imenso, além de garantir que não te repetes tanto. Se quiseres, diz algo.

Share this post


Link to post
Share on other sites
joaotavares

Agradecia se pudesse arranjar.Mas este código não está a funcionar

Share this post


Link to post
Share on other sites
Mineiro

http://www.megaupload.com/?d=QDGWVWMI

Aqui tens o link para o código-fonte + um exemplo de utilização (menu de um cliente de e-mail simples). Pondera reestruturar o teu programa com base nisto!

Entretanto vou dar uma vista de olhos ao teu código.

EDIT: as subrotinas aparecem como indefinidas porque, no teu ficheiro, as estas a chamar antes de as implementar. Organizar tudo numa classe resolveria este problema.

Share this post


Link to post
Share on other sites
Mineiro

Fazeres uma classe menu e trabalhar a partir daí. Ou então organizar de forma a que nada seja chamado antes de estar definido.

Tu neste momento tens (apenas um exemplo, não reflecte a realidade do código):

menu3 que precisa dos menus 2 e 1;

menu1 que nao tem dependencias;

menu2 que precisa do menu 1;

O compilador nao reconhece o menu 3...

No entanto, se o passares para o "fundo" ele la o vai reconhecer. O parsing e feito de cima para baixo.

Share this post


Link to post
Share on other sites
joaotavares

o meu problema nos menus e nao consigar voltar ao menu anterior utilizando apenas switch case consigo criar os menus que quero mas nunca volta atras no menu so anda para a frente. Tentei com as funções mas aparece me sempre que alguma não está definida mas percebi aquilo que me explicou mas neste caso do meu código não dá porque há varias que precisam da função menu()

Share this post


Link to post
Share on other sites
joaotavares

Já resolvi o problema dos menus. Existe algum comando para quando passo de um menu para outro só aparecer o menu seguinte apagando da consola o anterior?

Share this post


Link to post
Share on other sites
LabregoO

Já resolvi o problema dos menus. Existe algum comando para quando passo de um menu para outro só aparecer o menu seguinte apagando da consola o anterior?

Um comando que "limpe" o Output , certo ?

Em Linux : "system ("clear");" (por acaso não sei se este funcionará em Windows)

Em Windows : "system ("cls");"

:D

Share this post


Link to post
Share on other sites
Localhost

Funções com chamadas ao sistemas são pesadas e não são portáveis, logo não são recomendáveis, se te servir podes sempre fazer um printf com muitos \n.


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.