Я здесь новый, и я также новичок в языке C. У меня проблема с моим коммутатором, несмотря на то, что у меня есть значение по умолчанию. У меня есть меню с параметрами от 1 до 5, а также 0. Дело в том, что когда я запускаю программу и вводю любое число с более чем 1 цифрой, программа только считывает первую цифру и выполняет соответствующую опцию. Например, если я введу 13, программа откроет параметр номер 1, если я введу 243, программа откроет второй вариант и так далее. То же самое происходит, если я ввожу комбинацию цифр и букв, таких как 1d, 4b, 5A и т. Д.Switch - по умолчанию не работает в C
Помогите мне пожалуйста?
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()' он читает только один символ, который является '1' в случае' 13' и '2' в случае' 243'. Поэтому он входит в 'case '1':' и 'case '2':' not 'default:'. –
Попробуйте [Переполнение стека на португальском языке] (http://pt.stackoverflow.com/) (бета). – pmg