Problema com o gcc - Switch Case

1. Problema com o gcc - Switch Case

Emanuel
_EFS

(usa Slackware)

Enviado em 14/03/2011 - 15:28h

Boa tarde comunidade VOL,

estou fazendo um exercício em C, mas estou tendo problemas em fazer o menu. O que acontece é que quando escolho uma opção do menu para "rodar" ela execulta junto com o menu. A única parte que funciona é a de sair, onde usei a função exit(0);. Aproveitando a oportunidade alguem sabe como fazer com que o programa não "quebre" ao selecionar uma letra como opção? Na opção default só imprime a mensagem Opção inválida ao teclar números que não correspondem ao menu, agora letra, o programa não funciona mesmo. Bom essas são as minhas dúvidas!

Desde já agradeço a compreensão.


  


2. Re: Problema com o gcc - Switch Case

Emanuel
_EFS

(usa Slackware)

Enviado em 14/03/2011 - 15:29h

opaa, ocódigo é esse

#include <stdio.h>
#include <stdlib.h>
int main()
{
int opcao;
char nome[80];

printf("\t------------------SISTEMA DE PONTUACOES--------------------");
printf("\n\tTecle [1] para calcular sua pontuacao");
printf("\n\tTecle [2] para ver as estatisticas");
printf("\n\tTecle [3] para sair");
do{
printf("\n\tEscolha sua opcao:");
fflush(stdin);scanf("%d",&opcao);
switch(opcao)
{
case 1:
printf("\n\tDigite seu nome:");
gets(nome);
break;
case 2:
printf("\n\tVoce escolheu a opcao [2]\n");
break;
case 3:
exit(0);
break;
default:
printf("\n\tOpcao invalida\n");
break;
}
}while(opcao!=3);
return(0);
}



3. Re

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 14/03/2011 - 16:17h

Na verdade não é problema com o gcc e sim da forma que voce esta fazendo!

#include <stdio.h>
#include <stdlib.h>
int main()
{

char nome[20];
int opcao;

printf("\t------------------SISTEMA DE PONTUACOES--------------------");
printf("\n\tTecle [1] para calcular sua pontuacao");
printf("\n\tTecle [2] para ver as estatisticas");
printf("\n\tTecle [3] para sair");

printf("\n\tEscolha sua opcao:");
do{

scanf("%d",&opcao);
switch(opcao)
{
case 1:

printf("\n\tDigite seu nome:");
scanf("%s",&nome);
break;

case 2:
printf("\n\tVoce escolheu a opcao [2]\n");
break;

case 3:
exit(0);
break;

}
}while(opcao!=3);
return(0);
}

Tente isso!!!
E uma dica util: ------->> Procure não usar gets em seu programas!! gets é perigoso e deixa brechas para overflow
E sobre o programa nao quebrar quando é digitado alguma letra procure sobre a biblioteca "ctype.h" ela conte as funções isalpha(), isdigit(), isalnum(), que sao para verificar valores!!!!


4. Re: Problema com o gcc - Switch Case

Emanuel
_EFS

(usa Slackware)

Enviado em 14/03/2011 - 16:29h

Opa, valeu pela dica da biblioteca. Mas sobre o programa, ao escolher uma das opçoes do menu ele agora ta execultando normal, como o nome, o problema é que logo apos a execulção ele não retorna a "tela" do menu. Foi or isso que eu pus o "do{" no início do menu, para depois da execulção ele voltar para o mesmo.


5. Re: Problema com o gcc - Switch Case

Emanuel
_EFS

(usa Slackware)

Enviado em 14/03/2011 - 16:40h

o scanf(); também não faz a leitura do espaço, caso no nome eu ponha "fulano de tal", eu vi um tópico em que o scanf para pegar o espaço tinha a seguinte sintaxe scanf("%[^\n]s",&variável);, o problema é que caso eu use isto ao colocar o "do{" no início do menu, ao selecionar por exemplo a opção 1, so apareçe na tela "Digite seu nome:" e logo em baixo o menu, pedindo para escolher uma opção. Alguém sabe como resolver.


6. Re: Problema com o gcc - Switch Case

Franck Moreira
Delay

(usa Ubuntu)

Enviado em 14/03/2011 - 21:26h

Colega VoL, se vc quer que seu script volte para o menu apos uma primeira execução vc deve coloca o comando de do{ acima dos seus printf's e segundo o seu while está com logica errada pois so ira voltar ao inicio se for digitado 3 - e tres faz com que a execução termine - dê uma olhada nisso e procure uma meio de resolver para que ele execute para 1,2 e 3. Quanto ao uso do scanf e do gets sugiro que vc procure aki mesmo no VoL tutoriais que informam sobre o uso do fgets. Espero ter te dado uma luz para solução!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts