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

Ajuda para um programa, linguagem C

Discussão em 'Programação' iniciada por FrostPt, 13 de Julho de 2012. (Respostas: 14; Visualizações: 1797)

  1. Bem, este é o meu primeiro post aqui no fórum e precisava de ajuda num programa. Sou ainda inexperiente a programar, por isso se fosse possível, pedia-vos que me explicassem os meus erros e como melhorar :D

    O enunciado é o seguinte:

    Desenvolva um programa que converte temperaturas entre graus centígrados
    e Fahrenheit. O programa começa por ler um char seguido de um float. Se o
    primeiro for f ou F, o programa converte a temperatura de graus Centígrados
    para Fahrenheit; se for c ou C converte de Fahrenheit para Centígrados; caso
    contrário escreve uma mensagem de erro e sai antes de ler o valor numérico.

    As fórmulas de conversão são as seguintes:
    °F = °C × 1,8 + 32.
    °C = (°F − 32) / 1,8

    O meu código:

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

    int main ()
    {
    int grau;
    float temp, C, F;

    printf ("\nEscolha \n\n");
    printf ("f ou F, para converter para Fahrenheit \n");
    printf ("c ou C, para converter para Centígrados \n");

    grau = getchar ();

    if ((grau != 'c' || grau != 'C') && (grau != 'f' || grau != 'F') && (grau != EOF) );
    {
    exit (-2);
    }
    else
    {
    if ((grau == 'c' || grau == 'C') && (grau == EOF));
    {
    printf ("Intruduza agora a temperatura em graus Fahrenheit que quer converter para graus Centígrados \n");
    scanf ("%f", &temp);
    C = (temp - 32) / 1.8;
    printf ("%fºF são %fºC \n", temp, C);
    exit (-1);
    }

    if ((grau == 'f' || grau == 'F') && (grau == EOF));
    {
    printf ("Intruduza agora a temperatura em graus Centígrados que quer converter para graus Fahrenheit \n");
    scanf ("%f", &temp);
    F = temp * 1.8 + 32;
    printf ("%fºC são %fºF \n", temp, F);
    exit (0);
    }
    }
    }

    Desde já agradeço, a quem me possa ajudar :D
     
    Última edição: 13 de Julho de 2012
  2. Psycop

    Psycop I fold therefore I AM

    Qual é a tua dúvida concretamente?

    Mas Tu vais ler informação de algum ficheiro? Porque usar o EOF (End of File)?

    Em vez dos if para podias usar um switch case, talvez facilitasse e fosse mais correcto.

    Cumps
     
  3. o problema é que aceita outras letras, e faz sempre o primeiro 'if' , msm que carregue 'f' ou 'F' , já para não falar que dá uma mensagem de erro a dizer que não há nenhum 'if' antes do 'else' :/
     
  4. só usei o EOF porque vinha na maior parte dos sites que consultei sobre getchar e etc's, assim como usar um int em vez de um char
     
  5. Psycop

    Psycop I fold therefore I AM

    O EOF é usado para criar um ciclo que vá ler toda a informação de um ficheiro até chegar ao final deste, ou seja até "End of File"...

    Cumprimentos
     
  6. Na eventualidade de ter que usar um switch, tendo em conta que eu preciso de selecionar uma letra, não posso fazer por exemplo, case c, pois não? Visto que o valor que tinha que estar após tinha que ser um inteiro :/
     
  7. Ok, consegui meter a funcionar com switch, mas em vez de aceitar uma letra, que era o pedido no enunciado, tive que meter como alternativa a escolha entre as duas opções :/ ainda tem uns quantos avisos, mas está a funcionar :D

    vou meter o código, caso achem necessário que eu altere qualquer coisa

     
  8. Ah e desde já obrigado pela ajuda e pelas sugestões, gostava e que em vez de selecionar as hipóteses usando números, desse para fazer o mesmo usando letras, com o getchar ou assim, quanto ao EOF já tirei, mas continua com o mesmo erro, diz que o else não tem nenhum if atrás.

    o getchar supostamente não guarda o input do teclado na variável grau? se tal é verdade então aquelas relações todas que tenho nos if's deviam resultar, mas por alguma razão parece passar por cima e faz sempre o mesmo :/
     
  9. BitoMaN

    BitoMaN Power Member

    Podes usar o switch com caracteres, usando plicas. Isto é:

    Código:
    char grau;
    
    grau=getchar();
    
    switch(grau){
        case 'c':
            instruções
            break;
    }
     
  10. Era exactamente isto que queria, muito obrigado ^^
     
  11. Há algum problema em usar maiúsculas? Funciona correctamente para os casos em que só há letras minúsculas, por exemplo no teu exemplo, case 'c', mas se experimento mudar, já não funciona, por exemplo, case 'C' :/
    Posso ser eu que me tenha esquecido de acrescentar alguma coisa :/
     
  12. BitoMaN

    BitoMaN Power Member

    Podes fazer isto:
    Código:
    switch(grau){
        case 'c':
        case 'C':
            instruçoes;
            break;
        case 'f':
        case 'F':
            instruçoes;
            break;
        default: break;
    }
    
    Assim ele faz as mesmas instruções quer seja maiuscula ou minúscula.
     
  13. És um génio :O ( mas por que é que não dá, da outra forma? :/ )
    obrigado ^^
     
  14. BitoMaN

    BitoMaN Power Member

    Não sei, provavelmente escreveste alguma coisa mal... só vendo o código que escreveste é que te poderia dizer porquê... mas se assim resulta acho que é agora isso é irrelevante xD
     
  15. Isso é verdade :D mais uma vez obrigado ^^
     

Partilhar esta Página