Ir ao conteúdo

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


Ir à solução Resolvido por Leonardo0308,

Posts recomendados

Postado

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? 

  • Solução
Postado

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
Postado

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
Postado

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
Postado

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; 
	
}

 

 

Postado

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?

Postado
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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!