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

dario1133

menu

Recommended Posts

dario1133

tenho o seguinte menu, quando executo e carrego "a" ele faz tudo bem. quando carrego "h", bloquei e nao faz nada, porque? o que está mal?

void main (void)
{
char opcao;
int i,size;
estacionamentos v[n];

printf("menu do parque de estacionamento da cidade\n\n");

do{
	printf("a - adicionar nova viatura\n");
	printf("h - historico de estacionamentos\n");
	printf("esc - sair\n");

	opcao = getch();
	switch(opcao)
	{

	case 'a': if (adicionar_nova_viatura()==0)
		printf ("ERRO\n");
	            else
		printf("viatura adicionada com sucesso\n\n");
	              break;
			  
	case 'h': if((size=ler_ficheiro(v,n))==0)
			   printf("ERRO na leitura do ficheiro\n");
			  else
			  {
				printf("Estatistica:\n\n");
				Apuro_dia(v,size);
				n_viaturas(v,size);
				printf("nº de estacionamentos: %d\n",size);
				duracao_media(v,size);
				if (clientes_regulares(v,size)==0)
					printf("ERRO, nao e possivel mostrar o numero de clientes regulares\n");
				}
				break;

	case 27:break;
	default: printf("opcao invalida\n");
	}
}while(opcao!=27);

}

Share this post


Link to post
Share on other sites
pedrosorio

case 'h': if((size=ler_ficheiro(v,n))==0)

função please


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
pmg

Não vejo porque há-de bloquear (a não ser que seja na função ler_ficheiro).

Também bloqueia no 'h' se carregares em 'h' antes do 'a'?

Mas lembra-te que quando carregas no 'a' também carregas <ENTER>. Esse enter fica "pendurado" no buffer do teclado e é o que o getch apanha no ciclo seguinte.

Ah. Só mais uma coisa. O getch não é uma função standard do C. Para esta resposta assumi que tem o mesmo efeito que a função standard getchar().


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
dario1133

se eu carregar no "a", faz tdo bem, se carregar noutra tecla qualquer da erro, agora se carrego no h, seja antes seja dp, bloquei-a, nao faz nada.

Share this post


Link to post
Share on other sites
pmg

Hmmm ...

o getchar (não conheço o getch) devolve um int.

esse int que ele devolve estás a metê-lo num char.

mais abaixo, comparas esse char com um int ('a', 'h', e 27 são tudo ints).

Declara opcao como int a ver se há diferença.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Peterv5

Só uma coisa, reparei que uma das opções é o esc, estás a ler o imput para um caracter com a função que não necessita que se carregue no enter que é o getch, se não me engano. Mesmo que o programa só leia o e não função, quando esta vai para o switch não poderá ser avaliada por nenhuma das condições que lá estão, até porque o numero do e(que é a primeira letra do esc) é o numero 101 na tabela askii, ou seja não é 27, lolol.

O que não estou a perceber???

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

×

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.