Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

joaotavares

Menus

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.