Ir ao conteúdo

Posts recomendados

Postado

Bom dia pessoal, estou com um problema em C, ainda estou começando com a linguagem e bom, indo direto ao assunto, fiz um pequeno programa que toma algumas decisões baseadas na função switch(); que trabalha com uma integer que é pedida ao usuário, o problema é que quando o usuário entra com uma string o programa apresenta a mensagem do default repetidamente sem perguntar novamente ao usuário qual o valor da variável.

main(){
       int init;
       system("title Server Starter");
      while (true){
           chdir("C:\\Users\\gui\\Desktop\\SERVER\\MaNGOS\\");
           printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t ***Assistente de inicializacao do Server 1.12***");
           printf("\n\n\n1-Iniciar tudo\n2-Parar tudo\n-----------\n3-Iniciar Servidor MySQL\n");
           printf("4-Iniciar Servidor Web\n5-Iniciar Servidor de Logon\n6-Iniciar Servidor de jogo\n");
           printf("7-Desligar Servidor MySQL\n8-Desligar Servidor Apache\n9-Desligar Servidor de Logon\n10-Desligar Servidor de Jogo\n");
           printf("------------\n0-Sair\n\n:");
           scanf("%d", &init);
           switch(init)
           {
                        case 1:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             iniciartudo(init);
                             break;
                        case 2:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             killworld(init);
                             Sleep(1000);
                             killrealm(init);
                             Sleep(1000);
                             killsql(init);
                             break;
                        case 3:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start StartMySQL.bat");
                             break;
                        case 4:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start StartApache.bat");
                             break;
                        case 5:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start realmd.exe");
                             break;
                        case 6:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start mangosd.exe");
                             break;
                        case 7:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start StopMySQL.bat");
                             break;
                        case 8:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             system("start StopApache.bat");
                             break;
                        case 9:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             killrealm(init);
                             break;
                        case 10:
                             printf("\n\nVoce escolheu a opcao %d\n\n", init);
                             killworld(init);
                             break;
                        case 11:
                             printf("\n\nSaindo...\n\n", init);
                             exit(0);
                        default:
                             printf("Escolha Invalida, retornando ao menu principal...\n\n\n");
                             break;
           }
           system("pause");
       }
}

 

  • Curtir 1
Postado

utilize a função "fflush(stdin);", o problema é com o buffer, se quiser, tem esse link que me salvou quando o mesmo ocorreu comigo: http://www.cprogressivo.net/2012/12/Buffer--o-que-e-como-limpar-e-as-funcoes-fflush-e-fpurge.html

 

(coloquei o "fflush(stdin);" após o "scanf" no teste que fiz aqui e resolveu)

adicionado 15 minutos depois

Testei outras vezes e percebi que: caso eu colocasse "1", em seguida "c", ele entraria no "case 1", a gambiarra que fiz foi atribuir um valor ao "init" ao iniciar o "while", acredito que seja mais uma gambiarra que uma solução, creio que se tu trocar o "init" de "int" para "char" pode ser melhor nessa parte de validação...

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!