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

fezinn

[Ajuda] Optimizar Código

7 mensagens neste tópico

Boa tarde pessoal,

Sou do Brasil, mas acho que dá para entender o que falo, se não está a me entender, posso escrever em inglês.

[i'm from Brazil, if you can't understand me, please let me know... I will rewrite this text :D]

Primeiramente, parabéns pelo fórum, já me ajudou bastante, e olha que eu descobri dele hoje!!

Bem, estou com um problema...É com um programa que criei para converter comprimentos, tempos e velocidades.

A parte de tempos e velocidades está incompleta, mas o problema está mesmo na parte de comprimentos...

O código pode ser encontrado aqui (achei a letra muito pequena, e o pastie.org é mais intuitivo): http://pastie.org/445306

Aí está o código:

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <conio.h>

main(){
       int opcao;
       char opcaov1,opcaov2;
       double mm,cm,km,m,valorv;
       
       printf("\t\t\tMENU\n\n");
       printf("1 - Conversao de Comprimento\n");
       printf("2 - Conversao de Velocidade\n");
       printf("3 - Conversao de Tempo\n");
       scanf("%d",&opcao);

       
       switch (opcao){
              case 1:
                   system("cls");
                   printf("\n\t\t\tCONVERSAO DE COMPRIMENTO\n");
                   printf("\nQual a unidade de medida inicial?\n");
                   printf("\n\na - Milimetros <mm>");
                   printf("\nb - Centimetros <cm>");
                   printf("\nc - Metros <m>");
                   printf("\nd - Quilometros <km>\n");
                   scanf("%c",&opcaov1);
                   
                          switch (opcaov1){
                                 case 'a':
                                      cm=mm/10;
                                      m=mm/1000;
                                      km=mm/1000000;
                                      printf("Converter Milimetros");
                                 break;
                                 case 'b':
                                      mm=10*cm;
                                      m=cm/100;                        
                                      km=cm/100000;
                                      printf("Converter Centimetros");
                                 break;
                                 case 'c':
                                      mm=m*1000;
                                      cm=m/100;
                                      km=m/1000;
                                      printf("Converter Metros");
                                 break;
                                 case 'd':
                                      mm=km*1000000;
                                      cm=km*100000;
                                      m=km*1000;
                                      printf("Converter Quilometros");
                                 break;
                                 }
                   
                   printf("Qual o valor da unidade de medida que se deseja converter? ");
                   scanf("%lf",&valorv);
                   system("PAUSE");
                   
                   printf("\nQual unidade de medida para qual se deseja converter?");
                   printf("\n\ne - Milimetros <mm>");
                   printf("\nf - Centimetros <cm>");
                   printf("\ng - Metros <m>");
                   printf("\nh - Quilometros <km>\n");
                   scanf("%c",opcaov2);
                   system("PAUSE");  
                   
                   switch (opcaov2){
                          case 'e':
                               printf("%lf equivalem a %lf mm",valorv,mm);
                               break;
                          case 'f':
                               printf("%lf equivalem a %lf cm",valorv,cm);
                               break;
                          case 'g':
                               printf("%lf equivalem a %lf m",valorv,m);
                               break;
                          case 'h':
                               printf("%lf equivalem a %lf km",valorv,km);
                               break;
                               }
                   
                   
                   break;
              case 2:
                   printf("CONVERSAO DE VELOCIDADE");
                   break;
              case 3:
                   printf("CONVERSAO DE TEMPO");
              default:
                      printf("Opcao invalida! Fechando programa...");
                      break;
                      }             
system("PAUSE");              

}

Olhem algumas screens:

Primeira tela:

screen1c.jpg

Conversão de comprimentos:

screen2n.jpg

Aqui está o primeiro erro... eu não consigo digitar o numero! =/

screen3r.jpg

Aqui está o segundo erro... não consigo selecionar o character =/

screen4ass.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Precisas de limpar o buffer de entrada, de cada vez que lês um valor (pressionar de tecla), porque quando o fazes, carregas na tecla em questão e no Enter, logo não estás a introduzir 1, mas 2 caracteres, sendo o 1º utilizado normalmente, mas o segundo é aproveitado para a operação seguinte de leitura. Tenta colocar isto depois de cada scanf:

scanf("%*[^\n]"); scanf("%*c");

Podes ver a explicação aqui: http://wiki.portugal-a-programar.org/c:scanfparastrings

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Baderous: Obrigado cara! Funcionou.

Porém, estou com outro erro agora...

screen1.jpg

Sabes o que pode ser?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais uma coisinha please...

E como faaço para que quando digite "34" nao apareça "34.00000", pensava que era

printf("%.2. %lf equivalem a %.2. %lfmm",valorc,mm);

Não é?

Abraços e obrigado!

Código: http://pastie.org/pastes/445455

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais uma coisinha please...

E como faaço para que quando digite "34" nao apareça "34.00000", pensava que era

printf("%.2. %lf equivalem a %.2. %lfmm",valorc,mm);

Não é?

Abraços e obrigado!

Código: http://pastie.org/pastes/445455

Penso que é isto que pretendes: printf("%.2lf equivalem a %.2lfmm",valorc,mm);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era isto mesmo!

Obrigado pessoal, este blog está a me ajudar um bocado!

Sou iniciante mas estou aprendendo hahaha

Abraços!

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