Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com while para encerrar função


Luis Goethe

Pergunta

Olá pessoal.

Esse é o meu primeiro post no fórum, estou começando a estudar C e gostaria da ajuda dos amigos para solucionar um problema.

Estou montando um arquivo com uma calculadora de IMC onde quero que o usuário insira os dados (peso, altura) e depois da operação o sistema pergunte se o usuário quer fazer um novo calculo ou sair da aplicação.

Porém minha lógica está errada no uso de while para uma variável char.

Alguém pode me indicar onde errei?

#include <stdio.h>


char sair;

void   calculaIMC ( float peso, float altura ) {
    float imc = peso / (altura * altura );
    //
    printf("Seu IMC é: %.2f\n", imc);
    //
    printf("Tecla C para continuar e S para sair: \n");
    scanf("%c", &sair);
}
void coletaDados () {
    float peso, altura;
    //
    printf("Insira seu peso: ");
    scanf("%f", &peso);
    //
    printf("Insira sua altura: ");
    scanf("%f", &altura);
    //
    calculaIMC(peso, altura);
    //
}

int main () {
    while (sair != 'S' && sair != 's'){
        coletaDados();
    }
    //
    return 0;
}

Ele faz a primeira conta certinho, mas não para no scanf do continuar.... Já aparece o pedido para digitar o peso novamente.

Eu queria que após a primeira execução, o sistema perguntasse: Quer continuar? Isso muda o variável char do while e ele repete ou sai, mas errei em algum ponto.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Saudações,

Esse é um problema comum de acontecer. Na grande maioria dos casos a galera resolve assim:

int main () {
  char sair = ' ';

  while (sair != 'S' && sair != 's'){
    coletaDados();
    printf("\nTecla C para continuar e S para sair: \n");
    fflush (stdin);
    scanf (" %c", &sair);
  }
  
  return 0;
}

Pode usar também o loop "do... while()" ;)

Abraços,

William Rodrigues.

Editado por William Rodrigues
Link para o comentário
Compartilhar em outros sites

  • 0

Saudações Luis,

Estranho, porque aqui funcionou normal (VS 2010):

int main () {
  while (sair != 'S' && sair != 's'){
    coletaDados();
    printf("Tecla C para continuar e S para sair: \n");
    fflush(stdin);
    scanf("%c", &sair);
  }
  //
  return 0;
}

Está utilizando qual compilador?

Abraços,

William Rodrigues.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...