2010-07-10 58 views
10

Qualcuno può aiutarmi a capire perché questo dà un risultato di 0?Il programma C++ converte fahrenheit in celsius

#include <iostream>       
using namespace std;      

int main() {        
    float celsius;       
    float fahrenheit; 

    cout << "Enter Celsius temperature: "; 
    cin >> celsius; 
    fahrenheit = (5/9) * (celsius + 32); 
    cout << "Fahrenheit = " << fahrenheit << endl; 

    return 0;        
} 
+2

Sì, ho appena notato la formula corretta pure. Il programma presenta problemi più grandi della semplice stampa 0. – TNi

+1

L'esempio di codice sembra indicare che si desidera convertire i gradi Celsius in gradi Fahrenheit. Cosa vuoi convertire? – Alerty

risposta

22

(5/9) volontà di default computata in divisione intera e sarà zero. Prova (5.0/9)

+7

Oppure '(celsius + 32) * 5/9'. – Gabe

+8

@Gabe: Formula errata: P –

5

In C++, 5/9 calcola il risultato come un numero intero in quanto entrambi gli operandi sono numeri interi. Devi dare un suggerimento al compilatore che vuoi che il risultato sia float/double. Puoi farlo lanciando esplicitamente uno degli operandi come ((double)5)/9;

EDIT Dal momento che è etichettato C++, si può fare la punta di fusione più elegantemente con il static_cast. Ad esempio: static_cast<double>(5)/9. Anche se in questo caso particolare è possibile utilizzare direttamente 5.0/9 per ottenere il risultato desiderato, il casting sarà utile quando si hanno variabili invece di valori costanti, come 5.

+0

Non vedo perché questo è stato downvoted. È una risposta corretta, anche se potrebbe essere un candidato [SCITE] (http://meta.stackexchange.com/questions/19478/the-many-memes-of-meta/19535#19535). –

+1

Oh, non usare un cast orribile. Digita un valore letterale float direttamente come suggerisce jdv. –

+0

@Jon: Non dire che questa è la migliore risposta, ma sto dicendo che non merita downvotes. Non è * sbagliato * in alcun modo, non è solo il * migliore * modo. –

6

Fahrenheit a Celsius sarebbe (Fahrenheit - 32) * 5/9

+0

+1 formula corretta. Non capisco tutti i downvotes. – TNi

+0

Nonostante il titolo, il programma è chiaramente scritto per convertire Celsius in Fahrenheit (anche se ottiene la formula sbagliata) –

+0

Anche il tuo codice non funzionerà. Provalo. (Suggerimento: qual è il risultato di qualsiasi cosa/9 sarà in C++?) –

1

migliore modo sarebbe

#include <iostream>       
using namespace std;      

int main() {        
    float celsius;       
    float fahrenheit; 

    cout << "Enter Celsius temperature: "; 
    cin >> celsius; 
    fahrenheit = (celsius * 1.8) + 32;// removing division for the confusion 
    cout << "Fahrenheit = " << fahrenheit << endl; 

    return 0;        
} 

:)

3

Nel codice di esempio si sta tentando di dividere un numero intero con un altro numero intero. Questa è la causa di tutti i tuoi problemi. Ecco uno article che potrebbe trovare interessante su quell'argomento.

Con la nozione di divisione intera è possibile vedere subito che questo non è ciò che si desidera nella formula. Invece, è necessario utilizzare alcuni floating point literals.

Sono un po 'confuso dal titolo di questo thread e dal codice di esempio. Vuoi convertire i gradi Celsius in Fahrenheit o fare il contrario?

Baserò il mio esempio di codice sul proprio codice di esempio finché non fornirai ulteriori dettagli su ciò che desideri.

Ecco un esempio di cosa si può fare:

#include <iostream> 
//no need to use the whole std namespace... use what you need :)       
using std::cout; 
using std::cin; 
using std::endl;      

int main() 
{ 
    //Variables       
    float celsius, //represents the temperature in Celsius degrees 
      fahrenheit; //represents the converted temperature in Fahrenheit degrees 

    //Ask for the temperature in Celsius degrees 
    cout << "Enter Celsius temperature: "; 
    cin >> celsius; 

    //Formula to convert degrees in Celsius to Fahrenheit degrees 
    //Important note: floating point literals need to have the '.0'! 
    fahrenheit = celsius * 9.0/5.0 + 32.0; 

    //Print the converted temperature to the console 
    cout << "Fahrenheit = " << fahrenheit << endl;        
} 
0

miniera ha funzionato perfettamente!

/* Two common temperature scales are Fahrenheit and Celsius. 
** The boiling point of water is 212° F, and 100° C. 
** The freezing point of water is 32° F, and 0° C. 
** Assuming that the relationship bewtween these two 
** temperature scales is: F = 9/5C+32, 
** Celsius = (f-32) * 5/9. 
***********************/ 

#include <iostream> // cin, cout 

using namespace std; // System definition of cin and cout commands, 
        // if not, programmer would have to write every 
        // single line as: std::cout or std::cin 

int main() // Main function 

{ 

    /* Declare variables */ 
    double c, f; 

    cout << "\nProgram that changes temperature from Celsius to Fahrenheit.\n"; 
    cout << "Please enter a temperature in Celsius: "; 

    cin >> c; 
    f = c * 9/5 + 32; 
    cout << "\nA temperature of " << c << "° Celsius, is equivalent to " 
     << f << "° Fahrenheit.\n"; 
    return 0; 

} 
0

La risposta è già stato trovato anche se mi piacerebbe anche condividere la mia risposta:

int main(void) 
{ 
using namespace std; 

short tempC; 
cout << "Please enter a Celsius value: "; 
cin >> tempC; 
double tempF = convert(tempC); 
cout << tempC << " degrees Celsius is " << tempF << " degrees Fahrenheit." << endl; 
cin.get(); 
cin.get(); 
return 0; 

} 

int convert(short nT) 
{ 
return nT * 1.8 + 32; 
} 

Questo è un modo più corretto di fare questo; tuttavia, è leggermente più complesso di quello che stavi cercando.

0

E 'il più semplice che ho potuto venire con, in modo voluto condividere qui,

#include<iostream.h> 
#include<conio.h> 
void main() 
{ 
//clear the screen. 
clrscr(); 
//declare variable type float 
float cel, fah; 
//Input the Temperature in given unit save them in ‘cel’ 
cout<<”Enter the Temperature in Celsius”<<endl; 
cin>>cel; 
//convert and save it in ‘fah’ 
fah=1.8*cel+32.0; 
//show the output ‘fah’ 
cout<<”Temperature in Fahrenheit is “<<fah; 
//get character 
getch(); 
} 

Fonte: Celsius to Fahrenheit