1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C] getchar() a solução mais viável?

Discussão em 'Programação' iniciada por SkyistheLimit, 30 de Maio de 2008. (Respostas: 5; Visualizações: 835)

  1. SkyistheLimit

    SkyistheLimit Power Member

    Boas pessoal.

    Estou com o seguinte prob:

    Código:
    void exemplo()
    {
           system("cls");
           printf("1: Opção X");
           printf("2: Opção Y");
           printf("1: Opção Z");
           int opcao;
           scanf("%d",&opcao);
           switch (opcao)
           {
                   case 1: ....
                              break;
                   case 2: ...
                              break;
                   default: printf("erro!");
                              exemplo();
                              break;
            }
    }
    Quando insiro um número inteiro, por exemplo, 5, a validação de dados é feita e é apresentada a mensagem de erro, mas quando insiro um caracterer o programa "crasha".

    Tentei declarar a variável "opcao" como char, mas o scanf de char's não funciona muito bem, porque ele vai buscar a letra mais o "Enter".
     
    Última edição pelo moderador: 4 de Junho de 2008
  2. OubeLa

    OubeLa Power Member

    Declaras tudo como string, fazes uma verificação e convertes para inteiro. Se não passar na verificação lança uma excepção ou dá simplesmente erro.
     
  3. Baderous

    Baderous Banido

    Vê se serve:

    Código:
    #include <stdio.h>
    
    int main() {
        char opcao;
        do {
            printf("1 - Opcao X\n");
            printf("2 - Opcao Y\n");
            printf("3 - Opcao Z\n");
            opcao=getchar();
            switch (opcao) {
                   case '1': printf("Escolheu %c\n",opcao);
                             break;
                   case '2': printf("Escolheu %c\n",opcao);
                             break;
                   case '3': printf("Escolheu %c\n",opcao);
                             break;
                   default: printf("Valor invalido!\n");
                   }
            scanf("%*[^\n]"); scanf("%*c"); //limpa o buffer
           } while (opcao<'1' || opcao>'3');    
        return 0;
    }
     
  4. SkyistheLimit

    SkyistheLimit Power Member

    Obrigado Blade, funcionou =)

    O único problema é que o getchar() só lê o primeiro caracter inserido. Se escrever 11, ele executa o que está no case '1'.
     
    Última edição: 30 de Maio de 2008
  5. Baderous

    Baderous Banido

    Nesse caso, a melhor solução é então a do sir_atmc.
     
  6. Tyran

    Tyran Power Member

Partilhar esta Página