TTS 0 Denunciar post Postado Junho 15, 2008 Olá, eu sou novo neste fórum e estou precisando de uma ajuda. Recentemente, minha professora de física propôs um trabalho em grupo onde devíamos criar nossa própria escala termométrica. Eu então disse ao meu grupo que podia escrever um simples conversor para facilitar as coisas. Porém a coisa evoluiu e se tornou um conversor, também, de celcius-Fahrenheit e vice-versa. Entretanto, sou iniciante, e preciso de ajuda. aqui vai o source-code, inacabado: #include <stdio.h> int main() { float c; float f; float t; int fim; char result; fim = 0; do { printf ("\n\n\nEntre com a op%c%co desejada: ", 135, 198); printf ("\n1. Celcius"); printf ("\n2. Fahrenheit"); printf ("\n3. Tarresbrum"); printf ("\n3.Sobre..."); printf ("\n4.Sair\n\n"); do { scanf("%c",&result); } while (!isalnum((int)result)); if (result == 49) { printf ("\nEntre com o valor em celcius: "); scanf ("%f", &c); f = 0.8*c; t = 3; printf ("\nO valor de %5.2f graus Celcius %c \n%5.2f em graus Fahrenheit e %5.2f em Tarresbrum", c, 130, f, t); } else if (result == 50) { printf ("duh2"); } else if (result == 51) { printf ("duh3"); } else if (result == 52) { fim++; } else printf ("Nada de letras ou numeros fora da lista de opcoes!!!"); } while (fim == 0); return 0; } * Pode-se ver que eu não acabei o source, onde é necessário fazer algum cálculo eu escrevi "duhx", exceto na situação 1 (na verdade, depois de feita a situação um, é só mudar os dados.*Torresbrum é o nome de nossa escala. *Ok, Ok, eu sei que o source-code está bagunçado, podia ter feito os caso em funções separadas, etc, etc... Os problemas são os seguintes: 1. Caso o usuário digite alguma palavra na hora de escolher o que fazer, o programa vai executar a linha "printf ("Nada de letras ou numeros fora da lista de opcoes!!!");" x número de vezes, onde x é o número de letras que a possui a palavra que o "inteligente" digitou. Este problema é mais por questão de estilo. 2. O programa exibe ponto-e-vírgula mesmo em números matematicamente inteiros (não de tipo inteiro) ex.: 130.00. Este problema também é mais por questão de estilo. Tentei usar if (f - floor(f) > 0), mas o compilador me retornava uma mensagem de erro. 3. O programa exibe ponto ao invés de vírgula. Sei que tenho que usar algo relacionado com a locale.h, mas não sei o quê. Problema de resolução um pouco mais grave. Agradeço pela ajuda desde já, TTS Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Junho 15, 2008 seria algo mais ou menos assim: #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <conio.h> celcius() { float c, f, t; printf("Valor em Celcius: "); scanf("%f",&c); f = 0.8 * c; t = 3; printf ("\nCelcius: %5.2f\nFahrenheit: %5.2f\nTarresbrum: %5.2f\n\n", c, f, t); } void menu(char opcao) { printf("==== LEGENDA ====\n\n"); printf("C - CELCIUS \n"); printf("F - FARE \n"); printf("T - TARRES \n"); printf("S - SAIR \n"); printf("Escolha sua opcao no MENU: "); do{ scanf("%c",&opcao); fflush(stdin); switch(opcao) { case 'C': celcius(); break; case 'F': printf("caso farenheit"); break; case 'T': printf("caso tarres"); break; case 'S': break; default: printf("Escolha sua opcao no MENU: "); } }while(opcao != 'S'); } main(void) { char opcao; menu(opcao); } Compartilhar este post Link para o post Compartilhar em outros sites
TTS 0 Denunciar post Postado Junho 15, 2008 Puxa, valeu mesmo groove!!!! Além de resolver os problemas, o código ficou muito mais legível!!! Só uma coisa, o ponto ainda separa as casas decimais, como no padrão americano. Existiria alguma funão para mudar para vírgula, como no padrão brasileiro? Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Junho 15, 2008 olha, não sei qual função é =(( dei uma procurada, mas não achei nda "/ Compartilhar este post Link para o post Compartilhar em outros sites
TTS 0 Denunciar post Postado Junho 15, 2008 Bom, vou deixar assim mesmo, creio eu que não vai fazer diferença para a professora. Novamente, muito obrigado!!! Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Junho 15, 2008 só uma coisa velho, ali na conversão: f = 0.8 * c o correto é: f = 33.8 * c Compartilhar este post Link para o post Compartilhar em outros sites
TTS 0 Denunciar post Postado Junho 15, 2008 Ah é!!! Sobre a conversão ponto-vírgula, achei duas funções: Uma que lê vírgulas no lugar de pontos na hora do usuário entrar os dados float lerFloat() { int iLido2=0,iCont,iValorTeste; float fLido1=0,fSomar=0; fflush(stdin); scanf("%f,%d",&fLido1,&iLido2); if(iLido2!=0) { for(iCont=1;iCont<=15;iCont++) { iValorTeste=pow(10,iCont); if(iLido2<=iValorTeste) { fSomar=(iLido2/(pow(10,iCont))); break; } }// fim do for que vai testando por o que dividir } //printf("\n%d Dividir por %d resulta %f",iLido2,iValorTeste,fSomar); //printf("\n%f",fLido1+fSomar); return (fLido1+fSomar); } // fim da função Só uma coisa, essa função não é minha, é do Heltonritter, e ela foi postada no fórum do ScriptBrasil. e Achei outra função que seta o separador decimal de acordo com a sua região. #include <locale.h> setlocale (LC_NUMERIC, ""); Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Junho 15, 2008 ahh está quase lá então, tente fazer assim: setlocale(LC_NUMERIC, "pt_BR"); Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 15, 2008 http://opengroup.org/onlinepubs/007908799/xsh/setlocale.html Estranho.Deveria funcionar.MInha variável LANG é pt_BR e não pega nada. Alguém já tentou com a langinfo.h? Compartilhar este post Link para o post Compartilhar em outros sites