Jump to content
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
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

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.