Yame 0 Denunciar post Postado Dezembro 12, 2011 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
Shurd 0 Denunciar post Postado Dezembro 12, 2011 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
Renato Utsch 24 Denunciar post Postado Dezembro 12, 2011 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