Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Desenvolvedora

Menu

Recommended Posts

Faça o seu programa dentro de um loop "do while". Eu não o testei. Fiz agora, mas acho que funciona legal, basta fazer as modificações que achar necessárias.Ex.:#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char opcao; do {puts("Escolha uma opcao:\n"); puts("A - primeira opcao\n"); puts("B - segunda opcao\n"); puts("C - terceira opcao\n"); puts("D - quarta opcao\n"); puts("E - SAIR\n"); scanf("%c",&opcao); switch(opcao) {case 'A' : //coloque aqui seus comandos; break; case 'B' : //coloque aqui seus comandos; break; case 'C': //coloque aqui seus comandos; break; case 'D': //coloque aqui seus comandos; break; default : puts("Opcao invalida\n"); }} while(opcao!='E');system("pause");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai Desenvolvedora.

Vou postar aqui um exemplo de menu generico. Voce só precisa ter o arquivo ANSI.SYS, este arquivo já vem instalado no Windows 95 e 98. Quanto ao 2000 e XP tem que ser instalado, entre outros arquivos. Esse codigo praticamente compila em qualquer compilador, é só fazer as adaptações. Aqui está:

/* menu.c *//* mostra um simples menu *//* versão para Windows */#define NUM 5#define LIMPA "\x1B[2J" #define APAGA "\x1B[K"#define NORMAL "\x1B[0m"#define REVERSO "\x1B[7m"#define SET_DIR 77#define SET_ESQ 75#define INSERT 82#define POS_C(x,y) printf("\x1B[%d;%df",x,y)#include <stdio.h>main (){ static char *items[NUM] = { "Abrir", "Fechar", "Salvar", "Imprimir", "Sair" }; int poscur;  /* posição do cursor */ int cod, i, j; printf (LIMPA);  moldura(1,1,3,79,201,187,200,188,205,186); poscur=0; while(1) { impr(items,NUM,poscur); cod=lecod();  switch(cod) {   case SET_ESQ: if(poscur>0) --poscur;  else poscur=4; break;  case SET_DIR: if(poscur<NUM-1) ++poscur;  else poscur=0; break;  case INSERT: acao(poscur); break;   }  }}  /* impr() */  /* imprime menu */ impr(mat,tam,pos) char *mat[]; int tam,pos;{ int j;  POS_C(2,3); for(j=0; j<tam; j++) { if (j==pos) printf(REVERSO); printf("%10s		", *(mat+j) ); printf(NORMAL);  }  POS_C(24,1);} /* lecod() */ /* lê codigo do teclado */ lecod() { int tecla;/* A função getch() usada aqui é do Turbo C, voce deve substituir por uma função correspondente ao seu compilador */ while(getch() != 0) ; return( getch() ); } /* acao() */ /* executa ação baseada na posição do cursor */ acao(pos) int pos;{ printf (APAGA); switch(pos) { case 0: printf("Abrir"); break; case 1: printf("Fechar"); break; case 2: printf("Salvar"); break; case 3: printf("Imprimir"); break; case 4: exit();  }} /* moldura() */ /* desenha moldura na tela */   moldura(x1, x2, y1, y2, c1, c2, c3, c4, c5, c6) char x1, x2, y1, y2, c1, c2, c3, c4, c5, c6; { int i; POS_C(x1,x2); putch(c1); /* A função putch() usada aqui é do Turbo C, voce deve substituir por uma função correspondente ao seu compilador */ for(i=x2; i<y2; i++) putch(c5); putch(c2); for(i=x1+1; i<y1; i++){ putch('\n');  POS_C(i,x2); putch(c6); POS_C(i,y2+1); putch(c6); } POS_C(y1,x2); putch(c3); for(i=x2; i<y2; i++) putch(c5); putch(c4);}
O programa começa imprimindo o menu de 5 itens: abrir, fechar, salvar, imprimir e sair. Pela movimentação das setas, o usuario poderá ver qualquer um dos itens impresso em vídeo reverso. Se o usuario pressionar a tecla [iNSERT] enquanto algum item particular estiver destacado, a ação correspondente será executada.

Neste programa a ação de 4 itens é a mesma: o nome do item selecionado é impresso.

Naturalmente em uma aplicação real o programa deverá executar ações mais inteligentes.

O quinto item, sair, causa o fim da execução do programa e devolve o controle ao sistema operacional.

Um exemplo mais simples para Linux:

/* Versão para Linux *//* arquivos de cabecalho necessarios */  #include <curses.h>  #include <menu.h>   /* definicoes de constantes */  #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))  #define CTRLD	 4  #define ESCAPE 27   /* definicao do vetor de strings contendo as opcoes do menu */  char *choices[] = { 						 "Choice 1", 						 "Choice 2", 						 "Choice 3", 						 "Choice 4", 						 "Exit", 				   };   /* descricoes das opcoes do menu */  char *descriptions[] = { 						 "Description 1", 						 "Description 2", 						 "Description 3", 						 "Description 4", 						 "Exit Description", 				   };   /* inicio da funcao principal */  int main()  {		 /* declaracoes de variaveis */ 	 ITEM **my_items; /* itens do menu */ 	 int c;				 	 MENU *my_menu; /* menu */ 	 int n_choices; /* numero de opcoes do menu */ 	 int i; 	 ITEM *cur_item; /* ponteiro que indica o item em que estamos no menu */  	 /* funcoes de inicializacao do modo ncurses */ 	 initscr(); 	 cbreak(); 	 noecho(); 	 keypad(stdscr, TRUE);  	 n_choices = ARRAY_SIZE(choices); /* numero de opcoes do menu */  	 /* alocacao dinamica de memoria para os itens do menu */ 	 my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));  	 /* criacao dos itens do menu */ 	 for(i = 0; i < n_choices; ++i) 			 my_items[i] = new_item(choices[i], descriptions[i]); 	 my_items[n_choices] = (ITEM *)NULL;  	 /* criacao do menu */ 	 my_menu = new_menu((ITEM **)my_items); 	 mvprintw(LINES - 2, 0, "Esc to Exit");  	 /* envio do menu */ 	 post_menu(my_menu);  	 /* atualizacao da tela */ 	 refresh();  	 /* loop de controle do menu */ 	 while((c = getch()) != ESCAPE) 	 {			switch(c) 		 {	 			  case KEY_DOWN: 				 menu_driver(my_menu, REQ_DOWN_ITEM); 				 break; 			  case KEY_UP: 				 menu_driver(my_menu, REQ_UP_ITEM); 				 break; 		 } 	 }	  	 /* liberacao da memoria alocada para os itens */ 	 free_item(my_items[0]); 	 free_item(my_items[1]);  	 /* liberacao da memoria alocada para o menu */ 	 free_menu(my_menu);  	 /* finalizacao do modo ncurses */ 	 endwin();  }
Os codigos foram testados, é só compilar e pronto. Tchau.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.