reebr 94 Denunciar post Postado Novembro 26, 2012 E aí :yay:/> Estou fazendo um menu que tem 8 opções. Criei um loop para verificar a escolha do usuário, porém, independente do número que ele escolha DÁ ERRO (mesmo que seja uma das opções). código: do { opc = 0; //variável OPÇÃO ( de 1 até 8 ) ------- INSTRUÇÕES ------- opc = getch(); //INDEPENDENTE DO NUMERO ESCOLHIDO AQUI, DÁ ERRO if((opc == 0) || (opc > 8)) { erro = 1; MessageBox(NULL, "Digite um numero Valido", "Operação Cancelada", MB_OK|MB_ICONSTOP); } }while(erro == 1); HÁ algum outro comando para leitura que não mostre o valor na tela do console? Ou, há alguma forma de fazer o getch() funcionar corretamente no meu código? Alguém pode ajudar? :unsure:/> Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 27, 2012 você falou que dá erro. Que erro? Isso é genérico demais. Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Novembro 27, 2012 Ah sim, desculpa Isis. Então, independente da resposta pega no getch(), ele entra nesse if() if((opc == 0) || (opc > 8)) { erro = 1; MessageBox(NULL, "Digite um numero Valido", "Operação Cancelada", MB_OK|MB_ICONSTOP); } Exemplo: se eu digitar 1,2,3,4,5,6,7, ele mostra a messagebox. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Novembro 27, 2012 É porque opc sempre é maior que 8. Tente fazer isso: if((opc == '0') || (opc > '8')) { erro = 1; MessageBox(NULL, "Digite um numero Valido", "Operação Cancelada", MB_OK|MB_ICONSTOP); } Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Novembro 27, 2012 funcionou, valeu! Nunca tinha precisado colocar o '', somente quando era caracter. :upset: Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Novembro 28, 2012 O que acontece é que um caracter é representado internamente como um inteiro. Por exemplo, o getch() no windows normalmente retorna um caracter em codificação ASCII, e, se você olhar na tabela ASCII, o número 0 tem valor 48, o 1 tem valor 49, o 2 tem valor 50, até o 9, que tem valor 57. Então, ao comparar se o carater é maior que 8, com certeza ele será. Mas, ao comparar com o caracter '8', você está comparando na verdade com o valor 56 (caso a codificação for ASCII), que na codificação ASCII representa 8. Agora, não use o valor 56 para representar '8', pois caso a codificação for diferente (por exemplo, UTF-16), o caracter '8' será representado de outro modo, o que quebraria seu código. Tentei dar uma explicada rápida, estou sem tempo, se ficou meio confuso, sugiro procurar no google sobre como codificação de caracteres funciona. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Novembro 28, 2012 Deu para entender perfeitamente cara, obrigado de verdade! Pode fechar o tópico. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Novembro 28, 2012 Agora, só pra deixar completo, tem uma maneira mais portável ainda: if(!isdigit(opc)) { erro = 1; MessageBox(NULL, "Digite um numero Valido", "Operação Cancelada", MB_OK|MB_ICONSTOP); } Lembrando que tem que incluir o header <ctype.h> para ter acesso a essa função. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites