Ir ao conteúdo
  • Cadastre-se

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


Iksin
Ir à solução Resolvido por Leonardo0308,

Posts recomendados

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? 

Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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; 
	
}

 

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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...