Ir ao conteúdo
  • Cadastre-se

C Erro no comando For


Posts recomendados

Saudações,

 

Estou realizando um exercicio onde se deve pedir o valor de um carro, o seu ano, com estes dois valores, caso o carro seja de 2000 para baixo, devera conter 12% de desconto, caso seja acima de 2000, 7% de desconto. O algoritmo deverá retornar o Valor a pagar, o desconto que foi oferecido, a quantidade de carros até o ano 2000, e a quantidade total, depois de informado os resultados, o algoritmo pergunta se o usuario quer continuar ou não. Eu estabeleci que o usuario deve digitar 1 para continuar, e 2 para sair.

 

O problema é que o algoritmo não esta entrando na função for, mesmo com o valor de "parar" já estabelecido em 1. Onde está o erro ?

 

Segue o algoritmo:

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

/* Digitar o preço do carro, calcular o desconto e o valor a ser pago, Carros < 2000 - 12% de desconto, Carros > 2000 - 7% de desconto
o sistema pergunta se deve continuar a calcular até a resposta ser N, no final, informa total de carros com ano até 2000 e total geral */
float ValorPago (float valor_carro, float valor_desconto){
    float valor_pago;
    valor_pago = valor_carro - valor_desconto;
    return valor_pago;
}
float ValorDescontoMenor2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.12;
    return valor_desconto;
}
float ValorDescontoMaior2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.07;
    return valor_desconto;
}

int main() {
    float valor_carro, valor_desconto, valor_pago;
    int ano_carro, parar, qtd_2000, qtd_total;
    
    setlocale (LC_ALL, "");
    
    qtd_2000 = 0;
    qtd_total = 0;
    parar = 1;
    
    for (parar = 1; parar >= 2; qtd_total ++){
        
        printf("\n Digite o valor do carro \t");
        scanf ("%f", & valor_carro);
        printf("\n Digite o ano do carro\t");
        scanf ("%d", & ano_carro);
        if (ano_carro <= 2000){
            valor_desconto = ValorDescontoMenor2000 (valor_carro);
            valor_pago = ValorPago (valor_carro, valor_desconto);
            printf("O valor a ser pago é: %.2f \n Desconto:%.2f", valor_pago, valor_desconto);
            qtd_2000 ++;
        }
        else{
                valor_desconto = ValorDescontoMaior2000 (valor_carro);
                valor_pago = ValorPago (valor_carro, valor_desconto);
                printf("O valor a ser pago é: %.2f \n Desconto: %.2f", valor_pago, valor_desconto);        
            }
        
        printf("\n Digite 1 para continuar ou 2 para sair \t");
        scanf("%d", & parar);
    } 
    printf("Quantidade de carros total: %d \n Quantidade de carros com ano até 2000: %d", qtd_total, qtd_2000);
    return 0;
}

 

"

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Marcos William M    exatamente o que o @Xaws  disse, esse for assim não funciona ,  creio que seja melhor usar o do /  while .

  então seu código ficaria assim :

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

/* Digitar o preço do carro, calcular o desconto e o valor a ser pago, Carros < 2000 - 12% de desconto, Carros > 2000 - 7% de desconto
o sistema pergunta se deve continuar a calcular até a resposta ser N, no final, informa total de carros com ano até 2000 e total geral */
float ValorPago (float valor_carro, float valor_desconto){
    float valor_pago;
    valor_pago = valor_carro - valor_desconto;
    return valor_pago;
}
float ValorDescontoMenor2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.12;
    return valor_desconto;
}
float ValorDescontoMaior2000 (float valor_carro){
    float valor_desconto;
    valor_desconto = valor_carro * 0.07;
    return valor_desconto;
}

int main() {
    float valor_carro, valor_desconto, valor_pago;
    int ano_carro, parar, qtd_2000, qtd_total;

    setlocale (LC_ALL, "");

    qtd_2000 = 0;
    qtd_total = 0;
    parar = 1;

    do{
        parar=1;
        printf("\n Digite o valor do carro \t");
        scanf("%f",&valor_carro);
        printf("\n Digite o ano do carro\t");
        scanf("%d",&ano_carro);
        qtd_total++;
        valor_desconto = ValorDescontoMenor2000 (valor_carro);
        valor_pago = ValorPago (valor_carro, valor_desconto);
        printf("O valor a ser pago é: %.2f \n Desconto:%.2f", valor_pago, valor_desconto);
        if(ano_carro <= 2000){
            qtd_2000 ++;
        }
        printf("\n Digite 1 para continuar ou 2 para sair \t");
        scanf("%d",&parar);
    }while(parar != 2);
    printf("\n Quantidade de carros total: %d \n Quantidade de carros com ano até 2000: %d", qtd_total, qtd_2000);
    printf("\n     Tecle");
    getch();
    printf("\n\n");
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

17 horas atrás, Xaws disse:

@Marcos William M   O erro ta aqui
 


 for (parar = 1; parar >= 2; qtd_total ++){

O certo devia ser 
 for (parar = 1; parar >= 1; qtd_total ++){

 

 

Fazendo deste jeito, o Loop fica infinito, independente do valor que tu digitar quando ele pergunta se tu deseja continuar ou  nao.

 

Conseguir fazer o codigo funcionar desta maneira :

 

for (parar = 1; parar < 2; qtd_total ++){
		
		printf("\n Digite o valor do carro \t");
		scanf ("%f", & valor_carro);
		printf("\n Digite o ano do carro\t");
		scanf ("%d", & ano_carro);
		if (ano_carro <= 2000)

No entanto, o que ainda não entendi é que com esta linha de comando, decifrando o for seria: Começar quando parar seja igual a 1, parar quando o parar for menor que 2, acrescentar 1 unidade em qtd_total. Certo ?

Link para o comentário
Compartilhar em outros sites

@Marcos William M  Da forma que eu falei funcionou normal, eu testei aqui (uso o devc++)

"No entanto, o que ainda não entendi é que com esta linha de comando, decifrando o for seria: Começar quando parar seja igual a 1, parar quando o parar for menor que 2, acrescentar 1 unidade em qtd_total. Certo ?"

Não entendi direito sua pergunta, mais se for o que faz o for nesse caso: for (parar = 1; parar < 2; qtd_total ++){
 Sempre que parar for menor que 2 ele vai add

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

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!