suzy Posted January 21, 2007 at 06:46 PM Report #77660 Posted January 21, 2007 at 06:46 PM 😛 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
Tool Posted January 21, 2007 at 06:51 PM Report #77661 Posted January 21, 2007 at 06:51 PM 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
Dpontes11 Posted January 26, 2007 at 10:08 PM Report #78837 Posted January 26, 2007 at 10:08 PM 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...
undercover Posted February 4, 2007 at 05:34 PM Report #80274 Posted February 4, 2007 at 05:34 PM 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(); } 😕
Hipnoted Posted February 4, 2007 at 05:37 PM Report #80275 Posted February 4, 2007 at 05:37 PM pedro_fp_simoes tenta utilizar o GeSHi para pôr código. 😕 EDIT: no main falta o return 0 no fim. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
undercover Posted February 5, 2007 at 11:13 PM Report #80668 Posted February 5, 2007 at 11:13 PM 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 fikem bem ;D
bertolo Posted February 20, 2007 at 09:02 PM Report #84267 Posted February 20, 2007 at 09:02 PM 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).
bertolo Posted February 20, 2007 at 09:06 PM Report #84268 Posted February 20, 2007 at 09:06 PM 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
Hipnoted Posted February 20, 2007 at 10:50 PM Report #84279 Posted February 20, 2007 at 10:50 PM 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"
Warrior Posted February 21, 2007 at 09:29 AM Report #84316 Posted February 21, 2007 at 09:29 AM 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.
bertolo Posted February 21, 2007 at 12:31 PM Report #84340 Posted February 21, 2007 at 12:31 PM 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
Tool Posted February 21, 2007 at 01:25 PM Report #84349 Posted February 21, 2007 at 01:25 PM 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
bertolo Posted February 21, 2007 at 03:01 PM Report #84380 Posted February 21, 2007 at 03:01 PM lol ok eu não implico. 😄
Warrior Posted February 21, 2007 at 11:22 PM Report #84495 Posted February 21, 2007 at 11:22 PM Não é preciso dizer nada ao compilador. Ele ao ler inteiros/floats, por si mesmo, ignora os ' ', '\n' e '\t'.
alarico Posted February 23, 2007 at 05:18 PM Report #84732 Posted February 23, 2007 at 05:18 PM 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.
alarico Posted February 23, 2007 at 05:19 PM Report #84733 Posted February 23, 2007 at 05:19 PM faltou dizer q ta nas pp 82-83. sorry
Tool Posted February 23, 2007 at 08:35 PM Report #84767 Posted February 23, 2007 at 08:35 PM 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
Guest tsenart Posted February 23, 2007 at 08:52 PM Report #84770 Posted February 23, 2007 at 08:52 PM 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; }
Warrior Posted February 23, 2007 at 09:09 PM Report #84771 Posted February 23, 2007 at 09:09 PM 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?
Tool Posted February 24, 2007 at 01:31 AM Report #84814 Posted February 24, 2007 at 01:31 AM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now