Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yame

Função retornando valores

Recommended Posts

Estou fazendo o seguinte exercicio: Faça uma função que calcule o peso ideal de uma pessoa. A função deve receber o valor da altura da pessoa e um valor numérico indicando o sexo(0 - masculino e 1 - feminino). A função deve calcular o peso ideal de acordo com as seguintes fórmulas:

homens -> (72.7 * altura) - 58 e

mulheres -> (62.1 * altura) - 44.7.

Faça a função main para completar o seu programa. A função main deve ler a altura e o sexo de um conjunto de pessoas e imprimir o peso ideal até que seja digitado um valor negativo para altura.

 

Eu fiz o seguinte:

float PesoIdeal(char sex,float alt)
{
     float ideal;

     if(sex==0)
     {
     ideal=(72.7 * alt) - 58;
     }

     if(sex==1)
     {
       ideal=(62.1 * alt) - 44.7;
     }
     return(ideal);
}
int main(void)
{
   int sexo;
   float altura;

   while(altura>0)
   {
   printf("Digite o sexo do individuo\n :");
   scanf("%c", &sexo);
   printf("Digite a altura do individuo \n :");
   scanf("%f",&altura);
   getchar("%f");
   printf("O peso ideal eh %f",PesoIdeal(sexo,altura));
   printf("\n \n");
   }

   printf("\n\n");
   system("pause");  
   return(0);
}

 

Ele compila normalmente, sem nenhum erro mas nao exibe o resultado certo do peso ideal. Me disseram que eu precisaria limpar o buffer do stdin. Mas o que é isso?

Alguem poderia me explicar, por favor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce esta utilizando sexo como char e comparando como int, isso não da certo. Se voce for usar como char faça a comparacao --- sex=='1' --- ou simplesmente troque para letras ou a variavel para int.

E getchar não tem parametro viu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Como Shurd disse, você está usando sexo como char no scanf(), você deveria usar %d pois sexo é um int.

 

getchar() não tem parâmetro...

 

Sobre a sujeira no buffer de entrada, leia:

 

http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

 

Então, no final, você vai querer algo do tipo:

 

#include <stdio.h>

float PesoIdeal(int sex, float alt)
{
     float ideal;

     if(sex == 0)
     {
     ideal = (72.7 * alt) - 58;
     }

     if(sex == 1)
     {
       ideal = (62.1 * alt) - 44.7;
     }
     return ideal;
}
int main( void )
{
   int sexo;
   float altura;

   for(;;)
   {
       printf("Digite o sexo do individuo (0 = masculino, 1 = feminino): ");
       scanf("%d", sexo);
       if(sexo != 0 && sexo != 1)
           continue;
       printf("Digite a altura do individuo: ");
       scanf("%f", altura);
       if(altura <= 0)
           continue;
       printf("O peso ideal eh %f\n\n", PesoIdeal(sexo,altura));
       break;
   }

   getchar();
   return 0;
}

 

Nunca utilize system("pause")... utilize getchar() ao invés disso. Se quer a mensagem "pressione qualquer tecla para continuar...", simplesmente substitua getchar() por:

 

printf("Pressione ENTER para continuar...");
getchar();

 

Se não gosta de ficar colocando duas instruções desse tipo, faça uma função:

 

void pause( void )
{
   printf("Pressione ENTER para continuar...");
   getchar();
}

 

Isso mantém seu código portável a outros sistemas operacionais que não o Windows e é bem mais rápido do que system("pause")...

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.