2011-02-03 8 views
7

Sto scrivendo un programma per una classe Sono in e bisogno di aiuto con un programma per la conversione Fahrenheit a Celsius in C. Il mio codice è simile al seguenteprogramma C per convertire Fahrenheit a Celsius

#include <stdio.h> 
int main (void) 
{ 

int fahrenheit; 
double celsius; 

printf("Enter the temperature in degrees fahrenheit:\n\n\n\n"); 
scanf("%d", &fahrenheit); 
celsius = (5/9) * (fahrenheit-32); 
printf ("The converted temperature is %lf\n", celsius); 

return 0; 

} 

Ogni volta che lo eseguo, il risultato è 0.000000. So che mi manca qualcosa ma non riesco a capire cosa.

+6

Si lavora con numeri interi, è necessario lavorare con i galleggianti o doppie. – Joe

+2

Nota a margine, i compilatori di solito considerano 5,0 una doppia. Devi dire 5.0f per fare calcoli di valore float. Sembra più rilevante per il cellulare –

risposta

21

5/9 si tradurrà in divisione intera, che = 0

Prova 5.0/9.0 invece.

+3

tecnicamente parlando, 5/9.0 suffissi –

+0

ha funzionato! grazie mille :) – James

+0

@James Non dimenticare di accettare la risposta, quindi. –

0

È necessario utilizzare l'aritmetica in virgola mobile per eseguire questo tipo di formule con precisione. È sempre possibile convertire il risultato finale in un numero intero, se necessario.

0

scrittura 5/9.0 invece di 5/9 - questo forza doppia divisione

+0

grazie per l'aiuto di tutti, 5.0/9.0 ha fatto il trucco, anche il passaggio al doppio ha funzionato pure. grazie ancora – James

2

provare celsius = ((double)5/9) * (fahrenheit-32); oppure è possibile utilizzare 5.0.

Il fatto è che "/" esamina il tipo di operando. In caso di int il risultato è anche un int, quindi hai 0. Quando 5 è trattato come double, allora la divisione verrà eseguita correttamente.

8

È problema è qui:

celsius = (5/9) * (fahrenheit-32); 

5/9 vi darà sempre 0. Utilizzare invece (5.0/9.0).

0

Quando si ha a che fare con float, deve essere 5.0f/9.0f.

Quando si ha a che fare con il doppio, è necessario che sia 5.0/9.0.

Quando si tratta di numeri interi, resto/frazioni vengono sempre troncati. 5/9 risultati tra 0 e 1, quindi viene troncato a solo 0 ogni volta. Questo moltiplica l'altro lato per zero e annulla completamente la tua risposta ogni volta.

-4
using System; 


public class Calculate 
{ 

public static void Main(string[] args) 
{ 
    //define variables 
    int Celsius; 
    int fahrenheit; 
    string input; 

    //prompt for input 
    //read in the input and convert 
    Console.WriteLine("Enter Celsius temperature"); 
    input = Console.ReadLine(); 
    Celsius = Convert.ToInt32(input); 

    //calculate the result 
    fahrenheit = ((Celsius * 9)/5) + 32; 

    //print to screen the result 
    Console.WriteLine("32 degrees Celsius is {0}", "equivilant to 89.60 degrees fahrenheit"); 

    Console.ReadLine(); 
} 
+3

La domanda era su C. –

+2

Non solo la risposta non è in C, *** è ancora sbagliata perché fa esattamente lo stesso errore: divisione in interi ***: "(Celsius * 9)/5". –