Jump to content

a funcão ta correcta ou sera do meu compilador??


Recommended Posts

Posted

😛 desculpem mais um vez tar a incomodar  ? , não sei porque é que isto não funciona  ? na minha opinião deveria funcionar

#include<stdio.h>
float imc(float peso, float altura)
  {
  float a2;
  a2=altura*altura;
  return peso/a2;
  }

main()
{
float p,a,total;
printf(" introduza o peso e a altura\n");
scanf("%f%f",&p,&a);
total=imc(p,a);
printf(" o imc e %d\n",total);
fflush(stdin);
getchar();
}

uma funcção que calcula o imc de uma pessoa

Posted

A função parece correcta =x

substitui

printf(" o imc e %d\n",total)

por

printf(" o imc e %f\n",total)

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Posted

Posso não estar certo, mas acho que o teu problema está na linha:

scanf("%f%f",&p,&a);

Acho que tens de dar um espaço entre os %f

scanf("%f %f",&p,&a);

para que o programa saiba distinguir o valor do peso e o da altura...

  • 2 weeks later...
Posted

axo que é assim:

#include<stdio.h>

float imc(float peso, float altura){  
return (peso/(altura*altura)); 
}

int main(){
float p,a,total;
printf(" introduza o peso e a altura\n");
scanf("%f%f",&p,&a);
total=imc(p,a);
printf(" o imc e %.2f\n",total);
fflush(stdin);
getchar();
}

😕

  • 2 weeks later...
Posted

Posso não estar certo, mas acho que o teu problema está na linha:

scanf("%f%f",&p,&a);

Acho que tens de dar um espaço entre os %f

scanf("%f %f",&p,&a);

para que o programa saiba distinguir o valor do peso e o da altura...

este homem tem razão. mas o motivo não é esse.  espaço entre os %f's limpa o buffer. imagina: introduzes  o peso carregas nas teclas por exemplo: 32 enter, o enter fica no buffer do teclado, e tu tens de dizer À maquina para ignorar o enter. Faz o seguinte teste, a seguir ao scanf("%f %f",&p, &a); escreve um printf("%f", a);, o resultado que vais obter é o codigo ASCI correspondente ao caracter \n. SOLUÇÃO: limpa o buffer entre os scanf's (tens varias hipoteses de o fazer).

Posted

pedro_fp_simoes tenta utilizar o GeSHi para pôr código. 😁

EDIT: no main falta o return 0 no fim.

tás eganado, o return 0 não é necessario pq ele nao disse que a função main() devolvia um inteiro.

era necessário caso ele escrevesse: int main(void) { a abrir a função mãe

Posted

tás eganado, o return 0 não é necessario pq ele nao disse que a função main() devolvia um inteiro.

era necessário caso ele escrevesse: int main(void) { a abrir a função mãe

#include<stdio.h>

float imc(float peso, float altura){  
return (peso/(altura*altura)); 
}

int main(){
float p,a,total;
printf(" introduza o peso e a altura\n");
scanf("%f%f",&p,&a);
total=imc(p,a);
printf(" o imc e %.2f\n",total);
fflush(stdin);
getchar();
}

Está aí o int antes do main.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

Faz o seguinte teste, a seguir ao scanf("%f %f",&p, &a); escreve um printf("%f", a);, o resultado que vais obter é o codigo ASCI correspondente ao caracter \n. SOLUÇÃO: limpa o buffer entre os scanf's (tens varias hipoteses de o fazer).

???

Desde quando é que o C lê \n para variáveis inteiras/floats? Nunca o fez. Ele simplesmente ignora esse caracter.

Posted

ignora esse caracter e todos os caracteres iguais a ele durante a string, desde que lhe digas para isso. tb podias fazer

scanf("%d", &a);
while(getchar() != '\n');
scanf("%d", &b);

vejam a pagina 61 do Damas

assim tb dá. ou usando fflush(stdin)

ou ainda:

scanf("%d", &a);
scanf(" %d", &b);
/*tem um espaço antes do %d no segundo scanf que faz aquilo que eu tava a dizer

ps: não quis parecer mal educado. fui um pc rispido

tás eganado, o return 0 não é necessario pq ele nao disse que a função main() devolvia um inteiro.

era necessário caso ele escrevesse: int main(void) { a abrir a função mãe

Posted

Convém pores o "return 0"  e o main a retornar int, Sempre que fazes um programa deves po-lo a retornar 0 caso termine com sucesso ou != 0 caso termine com erro,etc.. e tb não te custa nada fazer isso! va la não impliques com o "return 0" lol

de qualquer maineira se compilares  " gcc -Wall  ficheiro.c"    o compilador vai-te dar um warning 😄

abraço.

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Posted

O erro estava na utilização de %d. Com floats é %f. De qq modo, a main deve retornar um int e no fim fazer-se return(0). Em lugar fo fflush pode-se usar *c como mostrado no "Fundamental da programação em C" FCA.

Posted

Não é preciso dizer nada ao compilador.

Ele ao ler inteiros/floats, por si mesmo, ignora os ' ', '\n' e '\t'.

dizer algo ao compilador? =X

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Posted

Ainda mais compacto e elegante como eu gosto... Lol

#include<stdio.h>

float imc(float peso, float altura) 
{
      return peso/(altura*altura);
}

int main()
{
  float p,a;

        printf("Introduza o peso e a altura em cm(peso altura)-> ");
scanf("%f %f",&p,&a);
printf("\nO seu IMC e %.2f.\n",imc(p, a)*10000);
fflush(stdin);
getchar();
return 0;
}
Posted

ignora esse caracter e todos os caracteres iguais a ele durante a string, desde que lhe digas para isso.

Foi só para manter a expressão dele.

Ele disse que tínhamos que dizer a alguém para ignorar, eu supus que fosse ao compilador. Terei que falar com outro componente qualquer do processo?

Posted

ignora esse caracter e todos os caracteres iguais a ele durante a string, desde que lhe digas para isso.

Foi só para manter a expressão dele.

Ele disse que tínhamos que dizer a alguém para ignorar, eu supus que fosse ao compilador. Terei que falar com outro componente qualquer do processo?

ah, nao tinha percebido. Mas não interessa, como tu dizes e com razão, ele ignora os '\n',etc, por defeito.... (pelo menos em linux e com o gcc).

Engenharia de Redes e Sistemas Informáticos, DCC-FCUP. www.dcc.fc.up.pt

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.