Ajuda para um programa, linguagem C

FrostPt

Membro
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:
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
 
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' :/
 
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
 
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 :/
 
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

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");



printf("Escolhe (1: c ou C,2: f ou F):\n");
scanf("%d", &grau);

switch (grau) {
case 1:
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);;
break;
case 2:
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);
break;
default:
printf("Opção inválida\n");
}
return 0;
}
 
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 :/
 
Podes usar o switch com caracteres, usando plicas. Isto é:

Código:
char grau;

grau=getchar();

switch(grau){
    case 'c':
        instruções
        break;
}
 
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 :/
 
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.

És um génio :O ( mas por que é que não dá, da outra forma? :/ )
obrigado ^^
 
Back
Topo