1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema com C

Discussão em 'Programação' iniciada por frog, 29 de Junho de 2006. (Respostas: 24; Visualizações: 1134)

  1. frog

    frog Power Member

    Ola, como ainda estou no principio de C fiz um programa bem basico uma calculadora para adicionar e para subtrair, em que vcs carregam 1 para advionar e 2 para subtrair o problema e que se eu carregar 1 ou 2 vao os dois para adcionar, vcs sao a minha unica ajuda, como ainda nao tenho a disciplina de Informatica , vou parendendo pela net e por livros aqui vai o codigo:
    Código:
    #include <stdio.h>
    #include <windows.h>
    float a , b;
    char ch;
    int main()
    {      
    printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >>  ");
    scanf("%c" , &ch);
     
    if (ch=1)
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a+b);   
                     printf("\nBy JoAoZaO");  
    }
     
     if (ch=2);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a-b);   
     }                printf("\nBy JoAoZaO");  
     
     
     
     
     
    }
    
     
  2. frog

    frog Power Member

    desculpei o codigo, postei o codigo errado ,o codigo certo e o seguinte

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    float a , b;
    char ch;
    int main()
    {      
    printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n >>  ");
    scanf("%c" , &ch);
    
    if (ch=1)
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a+b);   
                     printf("\nBy JoAoZaO");  
    }
    
     if (ch=2);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a-b);   
     }                printf("\nBy JoAoZaO");  
     
    system("pause>nul") ;
    return 0;
     
    
       
    } 
    
     
  3. Jorge Candeias

    Jorge Candeias Power Member

    Análise rápida:

    tu nos ifs estás mesmo a dizer que ch é = a 1 ou a 2, mas o que tu queres é fazer a pergunta, logo tens de meter == nos if's
    Código:
     
    if(ch == 1)
         do something;
     
    e não 
    if(ch = 1)
         ...;
    
    de resto parece ok, mas não olhei muito atentamente :)

    Cumprimentos
     
  4. Koncaman

    Koncaman Utilizador Saloio

    se queres fazer uma comparação no if, tens que fazer
    if(variavel == x){
    }

    e porque é que ch é um caracter se o vais usar como um inteiro?
     
    Última edição: 29 de Junho de 2006
  5. frog

    frog Power Member

    Ok obrigado deu certo! Alguem pode-me explcar qual era a diferença entre por = ou ==?
    Vou agora por as funçoes dividir e multiplicar, e pena nao me dar muito bem com o switch...
     
  6. Koncaman

    Koncaman Utilizador Saloio

    com o igual fazes uma atribuição, com o == fazes uma comparação.

    ja agora, deve por um else depois dos dois if para salvaguardares a hipotese do utilizador não ter introduzido nem 1 nem 2.

    no 2º if estas a usar ; e depois { isso também não é muito boa politica.
     
  7. frog

    frog Power Member

    novo problema, e de isto que eu nao gosto em aprender uma linguagem, e cometer erros nao saber como resolvelos e vir para aqui, dve ser um bcd chato pa vcs, mas...ajudem o problema e que eu acrescentei multiplicaçao e divisao e agora da-se o mesmo problema!

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    float a , b;
    char ch;
    int main()
    {      
    printf("ola, escolha um numero\n<1> para soma\n<2> para subtracçao\n<3> para multiplicacao\n<4> para divisao\n >>  ");
    scanf("%c" , &ch);
    
    if (ch==1);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a+b);   
                     printf("\nBy JoAoZaO");  
    }
    
    if  (ch==2);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a-b);   
     }
     
    if  (ch==3);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a*b);   
     } 
    if  (ch==4);
    {
     printf(">>");
                     scanf("%f" , &a);
                     printf(">>");
                     scanf("%f" , &b);
                     printf("O resultado e: %.2f" , a/b);   
     } 
      
                    printf("\nBy JoAoZaO");  
     
    system("pause>nul") ;
    return 0;
     
    
       
    } 
    
     
  8. Koncaman

    Koncaman Utilizador Saloio

    ou bem que metes ; ou bem que metes { depois do if.
    e neste caso, deves por apenas as chavetas (que ja la estão).

    mas isso n te da warnings? que compilador é que tas a usar?
     
  9. frog

    frog Power Member

    Ja resolvi o problema, mudei CH de char para int, e tirei os ; ! O meu compilador e o Dev-c++!
    agora tenho um novo problema , esta calculadora so serve para fazer um calculo, e depois tem que se fechar e voltar a abrir, como e que eu faço para dar para fazer varios calculos, eu acho que tenho que usar o "for" mas nao sei como...
     
  10. MaxDamage

    MaxDamage Power Member

    podes fazer uma coisa do genero:

    Código:
    (...)
    
    char aux;
    
    do
    {
    
      /* o codigo que tens para pedir dois numeros e fazer o calculo */
    
      printf(" Deseja continuar ? (s/n) -> ");
      aux = getchar();
      printf(" \n \n ");
    
    } while ( aux == 's');
    
    claro que isto é o mais básico possivel, este código não verifica se é inserido um caracter diferente de 's' ou 'n', etc... mas acho que dá pa ver a ideia.

    edit - alteração da pergunta
     
    Última edição: 29 de Junho de 2006
  11. Koncaman

    Koncaman Utilizador Saloio

    MaxDamage é
    while ( aux != 's');

    também podes fazer a calculadora de forma mais intruitiva, e bastante mais interessante de programar...
    sendo que o formato de intridução pode ser algo dso tipo
    "nºy+nºx"
    e o resultado algo do tipo "= nºz"

    ou um mais simples

    nºx (return)
    operação (return)
    nºy (return)
    =nºz

    e fica à espera de uma nova operação até lhe dares indicação que queres sair (i.e. carregares numa letra, por ex).
    podes ainda eventualmente usar o resultado anterior, como entrada da operação seguinte...

    assim fazes uma calculadora mais intruitiva de usar, e com maior capacidade de calculo...

    mas se calhar ja te estou a dar trabalho a mais :p :D
     
    Última edição: 29 de Junho de 2006
  12. MaxDamage

    MaxDamage Power Member

    err.. s = sim , n = nao

    Percorre o ciclo enquanto o caracter de teste for 's' (sim), ou seja, enquanto desejar continuar.

    Assim, quando inserir um 'n' (nao), o while retorna falso e sai do ciclo.. por isso meti o while ( aux == 's');

    mas pode-me tar a escapar qualquer coisa :D
     
  13. Koncaman

    Koncaman Utilizador Saloio

    mas a pergunta foi, "deseja sair?"
    s = quero sair

    logo vai fazer o contrario do que tu queres
     
  14. MaxDamage

    MaxDamage Power Member

    Ups tens razão, a pergunta deveria ser "Deseja Continuar ?". Thanks pela correcção :D
     
  15. Tuaregue

    Tuaregue Power Member

    porque é que não usas case em vez de if? eu sei que estás a aprender, mas neste acho acho que era o mais acertado, e com os cases poderias tb evoluir para funções.
     
  16. frog

    frog Power Member

    Obrigado pelas respostas mas nao percebi muito bem, aquilo do while e de tornar a calculadora melhor, sera que me podem dar um codigo pronto para eu me basear ou estudar, ou isso e pedir de mais?
    Nao uso o case , pq nao consegui, eu tentei mas nao deu...
     
  17. xplor

    xplor Power Member

    seria mesmo o ideal, mas nesse caso eu aconselhava a utilização de variaveis locais, aliás eu mt raramente uso variaveis globais pq mais cedo ou mais tarde podes ter problemas.


    sabes usar funções?
     
  18. frog

    frog Power Member

    Eu aprendo tudo por livro ou entao , em alguns textos na internet, por isso nao sei usar funçoes mas posso ir ver ja isso
     
  19. xplor

    xplor Power Member

    se estás a aprender do zero aconselho-te o livro do damas, "Linguem C", Luis Damas. acho mt bom pra quem está a dar os primeiros passos.

    cumps
     
  20. frog

    frog Power Member

    Pois foi esse que eu comprei ontem :), e mesmo excelente, ele ensina mesmo do basico! Aconselho a todos os que se estejam a iniciar
     

Partilhar esta Página