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:  
Iksin

C++ RESOLVIDO Porque meu while não ta dando loop?

Recommended Posts

Boa tarde, estou fazendo um menu de opções e tenho que fazer com que volte ao menu caso a pessoa digite uma opção invalida. Eu fiz assim:


int main(){
	float s,f,d,n,m;
	int op;
	
	setlocale(LC_ALL, "Portuguese");
	printf("MENU:\n ");
	printf("\nEscolha a opção desejada:\t");
	printf("\n (1) = Salário novo \n (2) = Férias\n (3) = Décimo terceiro\n (4) = Sair\n\nOpção:\t");
	scanf("%d", &op);
	
	
	
		do{
		
			switch (op){
				case 1: 
				
				printf("\nDigite seu salário atual:\t");
				scanf("%f", &s);
					if (s<=350){
					 	n=s*0.15+s;
					} else if ((350<s)&&(s<=600)){
						n=s*0.10+s;
					} else if (s>600){
						n=s*0.05+s;
					}
					printf("\nO novo salário será:\t\t%.2f", n); 
					
					break; 
				case 2: 
					printf("\nFavor insira seu salário atual:\t");
					scanf("%f", &s);
					f=s*1/3+s;
					printf("\nO valor de suas férias será:  \t  %.2f \n\n\n\n\n", f);
					break;
				case 3:
					printf("\nFavor insira seu salário atual:\t");
					scanf("%f", &s);
					printf("\nFavor insira o número de meses de trabalho:\t");
					scanf("%f", &m);
					d=(s/12)*m;
					printf("\nO valor décimo terceiro salário será: %.2f \t \n\n\n\n\n", d);
					break;
				case 4:
					printf("Programa encerrado!\n");
				 	break;
					
					
			}
} while(op<1 || op>4);
			
	
	
	return 0; 
	
}

MAS, não volta, o programa simplesmente encerra... O que estou fazendo errado? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, ele está dando loop, só não está pegando a variável "op" de novo, tente esse código.


 

#include <stdio.h>

int main(){
    float s,f,d,n,m;
    int op;
    
    
    
    
    
        do{
            
            printf("MENU:\n ");
            printf("\nEscolha a opção desejada:\t");
            printf("\n (1) = Salário novo \n (2) = Férias\n (3) = Décimo terceiro\n (4) = Sair\n\nOpção:\t");
            scanf("%d", &op);
        
            switch (op){
                case 1: 
                
                printf("\nDigite seu salário atual:\t");
                scanf("%f", &s);
                    if (s<=350){
                         n=s*0.15+s;
                    } else if ((350<s)&&(s<=600)){
                        n=s*0.10+s;
                    } else if (s>600){
                        n=s*0.05+s;
                    }
                    printf("\nO novo salário será:\t\t%.2f", n); 
                    
                    break; 
                case 2: 
                    printf("\nFavor insira seu salário atual:\t");
                    scanf("%f", &s);
                    f=s*1/3+s;
                    printf("\nO valor de suas férias será:  \t  %.2f \n\n\n\n\n", f);
                    break;
                case 3:
                    printf("\nFavor insira seu salário atual:\t");
                    scanf("%f", &s);
                    printf("\nFavor insira o número de meses de trabalho:\t");
                    scanf("%f", &m);
                    d=(s/12)*m;
                    printf("\nO valor décimo terceiro salário será: %.2f \t \n\n\n\n\n", d);
                    break;
                case 4:
                    printf("Programa encerrado!\n");
                     break;
                    
                    
            }
} while(op<1 || op>4);
            
    
    
    return 0; 
    
}

 

Editado por DiF
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

A condição dentro do while deveria ser apenas op != 4, ou seja repete enquanto op for diferente de 4.

 

} while (op != 4);

 

Também pode usar a opção default no switch case pra lidar com a situação que a pessoa escolheu uma opção inválida, para exibir uma mensagem informando que a opção não é valida.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, @Iksin! Não encontrei uma função 'main()' no seu programa... Acho que, em um programa em C, deve existir essa função...

O comando 'while' é um 'verificador condicional' (não sei se é o termo correto...) Ele faz uma verificação e, se atendida ou não a verificação, é executado uma sequencia de comandos ou não, por isso o encerramento de linha após o 'while' está errado...

Coloque comentários em cada linha de seu programa, isso ajuda a pensar de maneira sequencial.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, André Ferreira da Silva disse:

Olá, @Iksin! Não encontrei uma função 'main()' no seu programa... Acho que, em um programa em C, deve existir essa função...

Primeira linha.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
agora, Math.Pi disse:

Primeira linha.

Obrigado!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o colega comentou a condição dentro do while está incorreta, a sintaxe do-while não permite mais de uma condição

agora, Iksin disse:

Boa tarde, estou fazendo um menu de opções e tenho que fazer com que volte ao menu caso a pessoa digite uma opção invalida. Eu fiz assim:



int main(){
	float s,f,d,n,m;
	int op;
	
	setlocale(LC_ALL, "Portuguese");
	printf("MENU:\n ");
	printf("\nEscolha a opção desejada:\t");
	printf("\n (1) = Salário novo \n (2) = Férias\n (3) = Décimo terceiro\n (4) = Sair\n\nOpção:\t");
	scanf("%d", &op);
	
	
	
		do{
		
			switch (op){
				case 1: 
				
				printf("\nDigite seu salário atual:\t");
				scanf("%f", &s);
					if (s<=350){
					 	n=s*0.15+s;
					} else if ((350<s)&&(s<=600)){
						n=s*0.10+s;
					} else if (s>600){
						n=s*0.05+s;
					}
					printf("\nO novo salário será:\t\t%.2f", n); 
					
					break; 
				case 2: 
					printf("\nFavor insira seu salário atual:\t");
					scanf("%f", &s);
					f=s*1/3+s;
					printf("\nO valor de suas férias será:  \t  %.2f \n\n\n\n\n", f);
					break;
				case 3:
					printf("\nFavor insira seu salário atual:\t");
					scanf("%f", &s);
					printf("\nFavor insira o número de meses de trabalho:\t");
					scanf("%f", &m);
					d=(s/12)*m;
					printf("\nO valor décimo terceiro salário será: %.2f \t \n\n\n\n\n", d);
					break;
				case 4:
					printf("Programa encerrado!\n");
				 	break;
					
					
			}
} while(op<1 || op>4);
			
	
	
	return 0; 
	
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim, while(op<1 || op>4) não pode, só while(op>4) por exemplo? Mas caso precise de duas condições para definir então não tem como?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Ronaldo José disse:

Como o colega comentou a condição dentro do while está incorreta, a sintaxe do-while não permite mais de uma condição

 

Desculpe amigo, mas a condição do "do while" permite mais de uma condição logica como por exemplo o "(op<1 || op>4)" seria interessante colocar "(op!=4)" caso ela queira que o menu volte mesmo que o usuário digite uma opção certa diferente de "4". 

adicionado 1 minuto depois
3 minutos atrás, Iksin disse:

Como assim, while(op<1 || op>4) não pode, só while(op>4) por exemplo? Mas caso precise de duas condições para definir então não tem como?

Como eu comente acima as duas opções são validas, só depende do que você quer fazer :)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carissimo colega.

 

uma boa solucao seria Apos o menu 

while (op>=1 || op

<=4) {

switch (op) ...

}

 

tenta encaixar essa logica.

 

 

 

 

Editado por DiF
Remover o vídeo que já foi postado em outro tópico

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

×