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

Menu em C

Discussão em 'Programação' iniciada por Ang3lo, 18 de Outubro de 2008. (Respostas: 11; Visualizações: 1736)

  1. Ang3lo

    Ang3lo Power Member

    Boas pessoal,

    Estou a fazer um trabalho para a universidade e estou com o seguinte problema no menu em c, tenho la as opções numeradas de 1 a 9, funciona tudo direito mas no caso de o utilizador digitar "123" o programa não diz "opção invalida" ao invés disso ele vai para o menu "1" porque é o primeiro carácter que ele lê.
    A minha duvida e como fazer ele dizer que a opçao é invalida porque se calhar vou ter de ter uma opçao "10" e se tiver de a usar estou em maus lençois.Estou a fazer o menu com switch cases e os dados de entrada sao do tipo char.

    Obrigado desde ja

     
    Última edição: 18 de Outubro de 2008
  2. Baderous

    Baderous Banido

  3. Nody

    Nody Power Member

    tenta um

     
  4. Master_piece

    Master_piece Power Member

    A opção que me vem agora a cabeça é os dados de entrada serem do tipo int e fazeres uma avaliação, usando condicionais.
    Não sei é se podes fazer uma coisa do tipo a seguir ao switch antes dos case utilizar um if/else.
     
  5. Ang3lo

    Ang3lo Power Member

    Pois mas o meu prof quer do tipo char, segundo ele o programa fica a prova de bala. Tem mesmo de ser com char.
     
  6. Baderous

    Baderous Banido

    O teu professor é o rei. Tenta então implementar algo parecido com aquilo que indiquei naquela thread, mas lendo o char com o scanf e analisando o valor retornado por este.
     
  7. alfinete

    alfinete Power Member

    Código:
    
    
    void menuPrincipal(void)
    {
        int opcao;
        _clrscr();
          for(;;)
          {
              puts(   "\n\n"
                "____________________________""\n\n"
                 "|1| Especialidades\n"
                       "|2| Consultas\n"
                 "|3| Utentes\n"
                 "|4| Medicos\n"
                "____________________________""\n"
                          "\n|0| Sair do Programa\n"
                "____________________________");
            scanf( " %d", &opcao );
            /* "passa por cima" do resto da linha */
            while( getchar() != '\n' );_clrscr();
                switch( opcao )
                  
                {
                case 1: _clrscr(); 
                        menuEspecialidades();
                        break;
                case 2: _clrscr();
                        menuConsultas();
                                   break;
                case 3: _clrscr();
                        menuUtentes();
                        break;
                case 4: _clrscr();
                        menuMedicos();
                        break;
                          case 0:  exit(0);
                }
        }
    
    }
    
    tens aqui um a prova de bala

    não tenho a certeza se a função _clrscr(), foi criada ou é de sistema , ja não lembro , mas penso que foi criada
     
  8. Baderous

    Baderous Banido

    Esses _clrscr() cheira-me a coisas made in Visual Studio, e aposto que se eu experimentar isso em Linux não vai compilar. E usar ciclos infinitos para implementar menus nunca foi uma coisa decente. Os ciclos do...while servem para alguma coisa.
     
  9. ld50

    ld50 Power Member

    Em vez de leres caracter a caracter lês logo uma string, depois comparas com o strcmp.
     
  10. Ang3lo

    Ang3lo Power Member

    Ja ta resolvido o problema usei o seguinte código

    Código:
    int get_opcao(void) 
    {
      int c1, c2;
      c1 = getchar();
      if (('0' <= c1) && (c1 <= '9')) {
        c2 = getchar();
        if (c2 != '\n') {
          /* invalido! */
          fflush_stdin();
          c1 = -1;}
    
      } else {
        fflush_stdin();
        c1 = -1;
      }
      return c1;
    
     
    Última edição pelo moderador: 20 de Outubro de 2008
  11. alfinete

    alfinete Power Member

    digita um 'a' ou 'b' caracter não numerico a ver o que ele diz...
     
  12. Ang3lo

    Ang3lo Power Member

    uma alteração que fiz foi colocar em vez do INT meti CHAR :P:P
     

Partilhar esta Página