Jump to content

Optimizar Código


Go to solution Solved by Baderous,

Recommended Posts

Posted

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 😄 ]

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:

http://img522.imageshack.us/img522/4103/screen1c.jpg

Conversão de comprimentos:

http://img185.imageshack.us/img185/8425/screen2n.jpg

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

http://img178.imageshack.us/img178/2366/screen3r.jpg

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

http://img135.imageshack.us/img135/4712/screen4ass.jpg

  • Solution
Posted

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: https://wiki.portugal-a-programar.pt/dev_geral/c/scanfparastrings/

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.