【发布时间】:2014-12-26 12:25:32
【问题描述】:
我是新来的,我也是 C 语言的新手。尽管有默认值,但我的开关确实有问题。我有一个选项从 1 到 5 以及 0 的菜单。问题是,当我运行程序并引入任何多于 1 位的数字时,程序只读取第一个数字并执行相应的选项。 例如,如果我引入 13,程序将打开第 1 个选项,如果我引入 243,程序将打开第二个选项,依此类推。如果我引入数字和字母的组合,例如 1d、4b、5A 等,也会发生同样的情况。
你能帮帮我吗?
int main()
{
char opcao, terminar=1; /*Zona de declaração das variáveis*/
MODULO mlunar;
MODULO *maux=NULL;
PONTOS *ponto=NULL, *p1=NULL;
do
{
printf("\n1 - Especificação dos dados do módulo e das condições iniciais do voo \n");
printf("2 - Simulalção do voo em modo de cockpit \n");
printf("3 - Apresentação em modo gráfico da trajectória do módulo \n");
printf("4 - Definição do perfil da superfície lunar \n"); /*Imprime as opções no ecrã*/
printf("5 - Simulação do voo em modo gráfico \n");
printf("0 - Terminar o programa \n");
printf("\nEscolha uma das opções acima indicadas, carregando no respetivo numero: ");
opcao=getchar(); /*Leitura da opção seleccionada*/
while(getchar()!='\n'){}; /*Limpar o buffer do teclado*/
switch(opcao) /*Condição para cada opção selecionada*/
{
case '1': /*Caso o utilizador carregue em '1', é invocada a função da 1ª opção e assim sucessivamente.*/
maux=opcao1(&mlunar); break;
case '2':
if(maux!=NULL)
{
opcao2(&mlunar);
}
else
{
printf("\n\nOpção 1 NÃO EXECUTADA! Por favor, execute a primeira opção.\n");break;
}
case '3':
opcao3(mlunar); break;
case '4':
p1=opcao4(ponto); break;
case '5':
opcao5(p1); break;
case '0':
printf("\nDeseja terminar o programa? \n S/s - sim \n N/n - não \n");
terminar=getchar(); /*Leitura da opção seleccionada*/
while(getchar()!='\n'){}; /*Limpar o buffer do teclado*/
while (terminar!='s' && terminar!='S' && terminar!='n' && terminar!='N') /*O utilizador não inseriu nenhuma das opções apresentadas*/
{
printf("\nA opção selecionada é inválida! Por favor, introduza uma opção válida.\n");
terminar=getchar();
while (getchar()!='\n'){}
}
default:
printf("\nA opção selecionada não existe! Por favor, introduza uma opção que conste na lista.\n");
}
}
while(terminar!= 's' && terminar!= 'S'); /*Enquanto a variavel 'terminar' nao receber um S ou s, o prorama nao terminara*/
return 0;
}
【问题讨论】:
-
好吧,乍一看,您的
case '2'和case '0'缺少break;。另外,您需要检查getchar()的使用逻辑。 -
你的问题是
getchar()它只读取一个字符,在13的情况下是1,在243的情况下是2。因此,它输入的是case '1':和case '2':而不是default:。 -
试试Stack Overflow in Portuguese(测试版)。
标签: c switch-statement default