2010-07-10 31 views
10

¿Alguien puede ayudarme a entender por qué esto da una salida de 0?C++ programa convierte fahrenheit en 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í, me he dado cuenta de la fórmula incorrecta también. El programa tiene mayores problemas que simplemente imprimir 0. – TNi

+1

Su muestra de código parece indicar que desea convertir grados Celsius a grados Fahrenheit. ¿Qué quieres convertir? – Alerty

Respuesta

22

(5/9) voluntad por defecto se calcula como una división de enteros y será cero. Pruebe (5.0/9)

+7

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

+8

@Gabe: Fórmula incorrecta: P –

5

En C++, 5/9 calcula el resultado como un número entero ya que ambos operandos son enteros. Debe dar una pista al compilador de que desea que el resultado sea flotante/doble. Puede hacerlo por colada explicitamente uno de los operandos como ((double)5)/9;

EDITAR Ya que está etiquetada C++, se puede hacer la colada poco más elegante usando el static_cast. Por ejemplo: static_cast<double>(5)/9. Aunque en este caso particular, se puede utilizar directamente 5.0/9 para obtener el resultado deseado, el casting será útil cuando se tiene variables en lugar de valores constantes como 5.

+0

No veo por qué esto se revocó. Es una respuesta correcta, aunque podría ser un candidato [SCITE] (http://meta.stackexchange.com/questions/19478/the-many-memes-of-meta/19535#19535). –

+1

Oh, no uses un yeso feo. Escriba un literal flotante directamente como sugiere jdv. –

+0

@Jon: No digo que esta sea la mejor respuesta, pero estoy diciendo que no merece votos a favor. No está * mal * de ninguna manera, simplemente no es la * mejor * forma. –

6

Fahrenheit a Celsius sería (Fahrenheit - 32) * 5/9

+0

+1 Fórmula correcta. No entiendo completamente todos los votos abajo. – TNi

+0

A pesar del título, el programa está claramente escrito para convertir grados Celsius a Fahrenheit (aunque se equivoque al formular la fórmula) –

+0

También su código no funcionará. Pruébalo. (Sugerencia: ¿cuál es el resultado de algo/9 en C++?) –

1

Mejor forma sería

#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

En el ejemplo de código que están tratando de dividir un número entero con otro número entero. Esta es la causa de todos tus problemas. Aquí hay un article que podría resultarle interesante sobre ese tema.

Con la noción de división de números enteros, puede ver de inmediato que esto no es lo que quiere en su fórmula. En su lugar, debe usar algunos floating point literals.

Estoy bastante confundido por el título de este hilo y el código de muestra. ¿Quieres convertir grados Celsius a Fahrenheit o hacer lo contrario?

Voy a basar mi código de muestra en su propia muestra de código hasta que proporcione más detalles sobre lo que desea.

Aquí es un ejemplo de lo que puede hacer:

#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

mina funcionó a la perfección!

/* 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 respuesta ya se ha encontrado aunque también me gustaría compartir mi respuesta:

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; 
} 

Esta es una forma más apropiada de hacerlo; sin embargo, es un poco más complejo de lo que estabas buscando.

0

Es la más simple que podía llegar a, por lo quería compartir aquí,

#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(); 
} 

Fuente: Celsius to Fahrenheit