2011-02-03 66 views
7

Estoy escribiendo un programa para una clase que estoy dentro y necesito un poco de ayuda con un programa para la conversión de Fahrenheit a Celsius en C. Mi código es el siguienteprograma en C para convertir grados 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; 

} 

Cada vez que lo ejecuto, el resultado es 0.000000. Sé que me estoy perdiendo algo pero no puedo entender qué.

+6

Se está trabajando con números enteros, es necesario trabajar con flotadores o dobles. – Joe

+2

Nota al margen, los compiladores generalmente consideran 5.0 un doble. Tienes que decir 5.0f para hacer cálculos de valores flotantes. Parece más relevante para el móvil –

Respuesta

21

5/9 dará lugar a la división de enteros, que será = 0

Trate 5.0/9.0 su lugar.

+3

técnicamente hablando, 5/9.0 basta –

+0

funcionó! muchas gracias :) – James

+0

@James No te olvides de aceptar la respuesta, entonces. –

0

Debe utilizar la aritmética de coma flotante para realizar este tipo de fórmulas con precisión. Siempre puede convertir el resultado final en un entero, si es necesario.

0

escritura 5/9.0 en lugar de 5/9 - esto obliga doble división

+0

gracias por la ayuda de todos, 5.0/9.0 hizo el truco, también cambiando a doble funcionó también. gracias de nuevo – James

2

tratar celsius = ((double)5/9) * (fahrenheit-32); o puede utilizar 5.0.

El hecho es que "/" observa el tipo de operando. En el caso de int, el resultado también es int, por lo que tiene 0. Cuando 5 se trata como doble, la división se ejecutará correctamente.

8

Se problema está aquí:

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

5/9 siempre le dará 0. Use (5.0/9.0) en su lugar.

0

Cuando se trata de flotadores, tiene que ser 5.0f/9.0f.

Cuando se trata de dobles, tiene que ser 5.0/9.0.

Cuando se trata de enteros, los restos/fracciones siempre se truncan. 5/9 resultados entre 0 y 1, por lo que se trunca a solo 0 cada vez. Eso multiplica el otro lado por cero y anula por completo tu respuesta todo el tiempo.

-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 pregunta era sobre C. –

+2

No solo la respuesta no está en C, *** todavía está mal porque hace exactamente el mismo error: división entera ***: "(Celsius * 9)/5". –

Cuestiones relacionadas