• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

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

21 mensagens neste tópico

:P desculpem mais um vez tar a incomodar  :-[ , não sei porque é que isto não funciona  :shocking: 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A função parece correcta =x

substitui

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

por

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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();
}

:confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

EDIT: no main falta o return 0 no fim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eheh pois é, tb fiz isso a correr  :lmfao:

só hoje é que tinha reparado no GeSHi, peço desculpa  ;)

e o Visual Studio tb ñ se queixou se fosse o GCC já piava mais fino  :wallbash:

fikem bem  ;D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :D

abraço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é preciso dizer nada ao compilador.

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora