Ir ao conteúdo

C Loop infinito em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Olá, sou novo aqui no fórum e na programação também. Estou com um problema e gostaria de ver se alguém poderia me ajudar ou até me dar dicas de melhoria!

Estou desenvolvendo um código simples para calcular um ou mais IMCs, o usuário decide quando parar, e no final ele mostra a média dos IMCs digitados, o menor e o maior IMC digitado. O código roda normalmente a primeira vez, porém dps da pergunta se ele deseja calcular outro IMC, entra num loop infinito. Se alguém puder me ajudar, agradeço.

Segue o código abaixo:

 

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

int main (){
    printf("################################################################################\n");
    printf("                                Calculando IMC                                    \n");
    printf("################################################################################\n\n");

    char parar;
    int i;
    float media, imc, gimc, maiorImc, menorImc, peso, altura;

    parar = 's';
    i = 0;
    maiorImc = 0;
    menorImc = 0;

    while (parar == 's'){
        printf("Digite seu peso: ");
        scanf("%f", &peso);
        printf("Digite sua altura: ");
        scanf("%f", &altura);
        imc = peso/(altura*altura);
        gimc = gimc + imc;
        i = i + 1;
        if (i == 1){
            maiorImc = imc;
            menorImc = imc;
        }
        else if (i != 1){
            if (imc > maiorImc){
                maiorImc = imc;
            }
            else{
                menorImc = imc;
            }
        }
    printf("O resultado do IMC digitado foi: %.1f\n", imc);
    printf("Deseja calcular outro imc? (s)im ou (n)ao: ");
    scanf("% c", &parar);

    }
    media = gimc/i;
    printf("A media dos IMC foi: %.2f\n", media);
    printf("O maior IMC foi: %.1f\n", maiorImc);
    printf("O menor IMC foi: %.1f\n", menorImc);

    return 0;
    system("pause");
}

 

  • Amei 1
Postado

@devair1010 Legal, não conhecia essa função, mas ainda não foi, depois da primeira operação o programa não guarda mais os dados, mas pelo menos parou de entrar no loop infinito, veja: 

ComUmFlush.png.85dc4882cb3c3a7e88346a88b1b02b9f.png

 

Aí tentei colocar a função na altura e no peso também, pensei que tinha funcionado, mas agora não sai do while kk, veja:

ComFlushEmTudo.png.6c271bc7807b8171f2be8eaa16661e43.png

  • Obrigado 1
  • Solução
Postado

@MarceloGouvea       Uma Outra Forma De Pegar Os Dados Sem Precisar Usar O Fflush  Seria Usar O Comando Getch No Final Do Loop , então seu código poderia ser assim  :

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
int main (){
    printf("################################################################################");
    printf("                                Calculando IMC\n");
    printf("################################################################################");
    char parar;
    int i=0;
    float media,imc,gimc,maiorImc,menorImc,peso,altura;
    parar = 'S';
    maiorImc = 0;
    menorImc = 0;
    while(toupper(parar) == 'S'){
        printf("Digite seu peso ----: ");
        scanf("%f",&peso);
        printf("Digite sua altura --: ");
        /*fflush(stdin);*/
        scanf("%f",&altura);
        imc = peso/(altura*altura);
        gimc = gimc + imc;
        i++;
        if(i == 1){
            maiorImc = imc;
            menorImc = imc;
        }
        else
            if(i != 1){
              if(imc > maiorImc){
                maiorImc = imc;
              }
              else{
                menorImc = imc;
            }
        }
        printf("\n");
        printf("O resultado do IMC digitado foi -: %.1f\n\n",imc);
        printf("Deseja calcular outro imc? (s)im ou (n)ao : ");
        parar=(char)getch();
        printf("\n\n");
        /*fflush(stdin);
        scanf("%c",&parar);*/
    }
    media = gimc/i;
    printf("A media dos IMC foi -: %.2f\n"  ,media    );
    printf("O maior IMC foi -----: %.1f\n"  ,maiorImc );
    printf("O menor IMC foi -----: %.1f\n\n", menorImc);
    printf("        Tecle !\n\n\n");
    getch();
    return 0;
}

mas se você quiser deixar o código como estava , então coloque o fflush antes de todos os scanf .

  • Curtir 1
  • Obrigado 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!