Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Beatriz Castro

C Menu de 4 pratos

Recommended Posts

Boa noite amigos, estou tentando fazer um programa, sou nova e estou tendo dificuldades, podem me ajudar? Faça um programa que imprima um menu de 4 pratos na tela e uma quinta opção para sair do programa. O programa deve imprimir o prato solicitado. O programa deve terminar quando for escolhido a quinta opção. Somente usando estruturas de repetição. PS: Quando executo, digito a opção de prato e fica repetindo o menu.

#include <stdio.h>
#include <stdlib.h>

// Menu 
main (){
	
	char m, A, B, C, D, S;
	
	do{
		printf("MENU");
		printf("\n\n - Prato A: R$ 30,00");
		printf("\n\n - Prato B: R$ 40,00");
		printf("\n\n - Prato C: R$ 50,00");
		printf("\n\n - Prato D: R$ 60,00");
		printf("\n\n - Opcao S: Sair do MENU\n\n"); 
		
		scanf("%c", &m);
		
		switch (m) {
		case 'A':
			printf("\n - Prato A: R$ 30,00");
			break;
			
		case 'B':
			printf("\n - Prato B: R$ 40,00");
			break;
			
		case 'C':
			printf("\n - Prato C: R$ 50,00");
			break;
			
		case 'D':
			printf("\n - Prato D: R$ 60,00");
			break;
			
		case 'S':
			printf("\n - Opcao S: Sair do MENU");
			break;
			
		default:
			printf("\n - Opcao Invalida");
	
		}
		}
		
	while (m);
	return 0;
	}
	

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você digita 1 letra e dá Enter, você está digitando 2 caracteres no terminal cmd, a letra e o caractere nova linha '\n'. O caractere nova linha é inserido quando você aperta o Enter.

 

Seu scanf no entanto está pegando apenas 1 caractere, o que resulta que deixa o caractere nova linha na entrada padrão. Então na próxima vez que o ciclo do while rodar o caractere nova linha já estará lá, logo o scanf vai tentar ler imediatamente passando direto por ele.

 

Para descartar um dado lido pelo scanf (ou seja, ler mas não guardar numa variável) usa-se * após o % do especificador de tipo. Nesse caso queremos descartar 1 caractere, então podemos usar %*c para ler e descartar 1 caractere.

 

Logo, o scanf fica assim:

scanf("%c%*c", &m);

 

OBS: Note que ainda tem muitas possibilidades para o usuário digitar algo inválido, como se ele digitar vários caracteres, aí teria que usar algo para descartar todos os caracteres digitados além do primeiro, como isso:

scanf("%c", &m);
while( (c=getchar()) != '\n' && c != EOF );

Mas no caso do seu programa podemos assumir que o usuário é bem comportado e sempre digita apenas 1 letra.

 

 

Outro problema no seu programa é que a condição do while deveria ser m != 'S', para continuar rodando o ciclo apenas enquanto m for diferente de 'S', que é a opção para sair do programa.

} while (m != 'S');

Também pode ser interessante colocar um getchar(); ou system("pause"); na última linha dentro do ciclo para o programa pausar após imprimir a opção escolhida, e esperar você digitar Enter para continuar.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Beatriz Castro   faça como o @isrnick   disse que está certo,   e você poderia colocar  a função toupper  da biblioteca ctype :

#include <ctype.h>

para que o programa aceite  letras minúsculas ou maiúscula   facilitando assim na hora de digitar a escolha,  então no switch você coloca assim  :

switch (toupper(m)) {
case 'A':

e coloca também no while  :

 }while(toupper(m)!='S');

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu gente! Corrigi e ficou assim: 

PS: Só não coloquei a biblioteca #include <ctype.h>, mas irei melhorar e colocar, obrigada!

#include <stdio.h>
#include <stdlib.h>

// Menu 
main (){
	
	char m, A, B, C, D, S;
	
		printf("MENU");
		printf("\n\n - Prato A: R$ 30,00");
		printf("\n\n - Prato B: R$ 40,00");
		printf("\n\n - Prato C: R$ 50,00");
		printf("\n\n - Prato D: R$ 60,00");
		printf("\n\n - Opcao S: Sair do MENU\n\n"); 
	do{
	
		printf("\nEscolha uma opcao:");
		scanf("%c", &m);
		
		switch (m) {
		case 'A':
			printf("\n - Prato A: R$ 30,00");
			break;
			
		case 'B':
			printf("\n - Prato B: R$ 40,00");
			break;
			
		case 'C':
			printf("\n - Prato C: R$ 50,00");
			break;
			
		case 'D':
			printf("\n - Prato D: R$ 60,00");
			break;
			
		case 'S':
			printf("\n - Opcao S: Sair do MENU");
			break;
	
	
	
		}
			
		}
		
	while (m!='S');
	return 0;
	}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Beatriz Castro Você não modificou o scanf.

 

E também faltou colocar o tipo int da função main().

 

int main() {

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×