Ir ao conteúdo
  • Cadastre-se
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; 
    
}

 

  • 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

Crie uma conta ou entre para comentar

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×