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

dario1133

menu

9 mensagens neste tópico

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);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que não estou a perceber???

esc -> tecla Esc[ape] -> código 27

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esc -> tecla Esc[ape] -> código 27

xD, aprendi bastante hoje, lololol

0

Partilhar esta mensagem


Link 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